คุณอาจเคยได้ยินเกี่ยวกับ RegEx ซึ่งย่อมาจากนิพจน์ทั่วไป อาจดูน่ากลัว แต่ก็ไม่ได้แย่เกินไปเมื่อคุณคุ้นเคยกับความหมายของรูปแบบ รวมถึงวิธีสร้างนิพจน์จริงและใช้งาน เมื่อคุณคุ้นเคยกับการคิดเกี่ยวกับสตริงและข้อความในลักษณะที่เป็นนามธรรมมากขึ้นแล้ว อาจเป็นเครื่องมือที่มีประโยชน์ในการแก้ปัญหาในกรณีที่คุณกำลังมองหารูปแบบทั่วไปในชุดข้อมูล
ป>
RegEx เป็นวิธีการจับคู่รูปแบบ:วิธีการกรองสตริงหรือข้อความตามรูปแบบ โดยปกติแล้วจะแยกและแก้ไขข้อความที่ต้องการ ในบทความนี้ เราจะพูดถึงวิธีใช้นิพจน์ทั่วไปและวิธีทดสอบนิพจน์เหล่านั้นโดยใช้วิธี Ruby เพื่อรวมเข้ากับตรรกะสำหรับโปรเจ็กต์ของคุณ
ป>
เครื่องมือหนึ่งที่มีประโยชน์อย่างยิ่งเมื่อพูดถึงการแสดงภาพและทำความเข้าใจ RegEx คือไซต์ที่เรียกว่า Rubular คลิกลิงก์ที่นี่เพื่อทดสอบ RegEx โดยใช้บล็อกข้อความที่มีการเติมข้อมูลไว้แล้ว คุณจะสังเกตเห็นว่าระหว่างเครื่องหมายทับทั้งสองจะมีสตริงที่มีคำว่า "เพื่อนบ้าน" อยู่ด้วย
ป>
เชื่อหรือไม่ว่านี่คือสำนวนปกติ! ทั้งคำ ประโยค และย่อหน้าสามารถเรียกได้ว่าเป็นนิพจน์ทั่วไปในทางเทคนิค (ตราบใดที่อยู่ระหว่างเครื่องหมายทับ 2 ตัว) สภาพแวดล้อม Rubular เน้นย้ำให้เราเห็นทุกกรณีของรูปแบบ 'เพื่อนบ้าน' ในบล็อกข้อความของเรา แม้แต่กรณีที่เพื่อนบ้านเป็นส่วนหนึ่งของคำที่ใหญ่กว่าด้วย! ดังที่กล่าวไปแล้ว คุณอาจต้องการค้นหาสิ่งที่เป็นนามธรรมมากกว่าการจับคู่คำทุกประการ นี่คือที่มาของอักขระเมตา
อักขระเมตา
การใช้ RegEx อาจเป็นเรื่องท้าทายสำหรับโปรแกรมเมอร์ผู้ช่ำชอง ดังนั้นอย่าท้อแท้
เช่นเดียวกับที่อะตอมเป็นส่วนประกอบของทุกสิ่งที่เราเห็นรอบๆ ตัว meta character ก็เป็นส่วนประกอบสำคัญของนิพจน์ทั่วไป เมื่อคุณเพิ่มลงในนิพจน์ทั่วไป รูปแบบโดยรวมจะเปลี่ยนไป และเมื่อรูปแบบโดยรวมเปลี่ยนแปลงไป ผลลัพธ์ที่คุณได้รับกลับมาจากวิธีการที่คุณใช้อาจแตกต่างกันไป
ป>
รายการด้านล่างนี้คือหลายวิธีในการแก้ไขนิพจน์ทั่วไปของคุณ เพื่อให้คุณสามารถค้นหารูปแบบที่เหมาะกับคุณได้ ไม่มีใครถูกต้องอย่างแน่นอน วิธีเขียนนิพจน์ทั่วไปสำหรับหมายเลขโทรศัพท์หรืออีเมล ฯลฯ ทั้งหมดนี้เกี่ยวกับความต้องการของคุณสำหรับโครงการของคุณ ป> MetaCharacterMatchesExample[abc]คลาสอักขระที่จับคู่อักขระตัวเดียวในสตริงที่อาจเป็น a, b หรือ c
/[eig]/ สามารถจับคู่ส่วนของ Neighbor, Apple หรือ Gate[^abc] คลาสอักขระที่ถูกปฏิเสธซึ่งตรงกับอักขระทุกตัวในสตริง แต่ a, b หรือ c/[^eig]/ สามารถจับคู่อักขระตัวเดียวในส่วนของเพื่อนบ้าน, apple หรือ gate[a-z] คลาสอักขระที่ตรงกับอักขระเดี่ยวใดๆ ในช่วง a-z/[e-i]/ สามารถจับคู่อักขระเดี่ยวในส่วนของเพื่อนบ้าน, apple หรือ gate
[a-zA-Z]คลาสอักขระที่ตรงกับช่วงอักขระตั้งแต่ a-z หรือ A-Z
/[e-i]/ สามารถจับคู่อักขระเดี่ยวในส่วนของ “Hi Neighbor!”, Grapple หรือ gate^ Start of line/^Hello/ จับคู่บรรทัดที่ขึ้นต้นด้วย 'Hello'$End of line/Goodbye$/ จับคู่บรรทัดที่ลงท้ายด้วย 'Goodbye'\AStart ของสตริง คล้ายกับ '^' แต่ไม่มีโหมดหลายบรรทัด/\Aa/ ตรงกับ 'a' ใน apple แต่ไม่ใช่ 'a' ในแอปริคอท เนื่องจากไม่ใช่จุดเริ่มต้นของสตริง:
แอปเปิ้ล
แอปริคอต\z สิ้นสุดสตริง คล้ายกับ '$' แต่ไม่มีโหมดหลายบรรทัด/\za/ ตรงกับ 'a' ในม้าลาย แต่ไม่ใช่ 'a' ใน libra เนื่องจากไม่ใช่จุดสิ้นสุดของสตริง
librazebra.ไวลด์การ์ด. Dot ตรงกับอักขระใดๆ /./ จะจับคู่อักขระตัวเดียวใดๆ ใน apple+จับคู่อักขระเมตาก่อนหน้าอย่างน้อยหนึ่งตัว/aa+/ จะจับคู่ 'aa', 'aaaaaaa' แต่จะไม่ตรงกับ 'a' เนื่องจากจะต้องเป็นอักขระเมตาก่อนหน้านี้อย่างน้อยหนึ่งตัว (ซึ่งในกรณีนี้คือตัวที่สอง a)*จับคู่อักขระเมตาก่อนหน้านี้เป็นศูนย์หรือมากกว่า/ab*/ จะจับคู่ 'a', 'ab', 'abbbbbb'\sช่องว่างใดๆ character/^The\s.+s$/ จะตรงกับ The Beatles , เดอะโรลลิ่งสโตนส์, เดอะแครนเบอร์รี่ ฯลฯ \SAอักขระที่ไม่ใช่ช่องว่าง/\S+/ จะตรงกับ The Beatles , เดอะโรลลิ่งสโตนส์, เดอะแครนเบอร์รี่ ฯลฯ \dตัวเลขใดๆ/\d+/ จะตรงกับ 22, 33333, 0 ฯลฯ\DAใดๆ ที่ไม่ใช่ตัวเลข/\D+/ จะตรงกับ 'สวัสดี ลาก่อน'\wอักขระคำใดๆ/ny\w*/ จะตรงกับ 'ny_152', 'nypost39' ฯลฯ\WAอักขระที่ไม่ใช่คำใดๆ/\W+/ จะจับคู่ ')(*&^%$'a{3}พอดี 3 ตัวของ 'a'/\d{3}-\d{3}-\d{4}/ จะตรงกับ 555-555-5555a{3,}สามหรือมากกว่าของ 'a'/[a-zA-Z0-9!#$^&*)(]{8,}/ จะตรงกับ 'xE*BqRx14B7TAQp' ⇐ ซึ่งดูเหมือนว่าจะสามารถใช้เป็นรหัสผ่านได้!a{3, 6}สามถึง หกของ 'a'/[a-zA-Z0-9!#$^&*)(]{8,32}/ จะจับคู่ '0XX!pC3Odpu30Qc' เนื่องจากมีความยาวมากกว่า 3 และน้อยกว่า 32 อักขระใน lengtha?0 หรือ 1 ของ 'a'/\d?-\d{3)-\d{3}-\d{4}/ จะจับคู่หมายเลขโทรศัพท์ที่มีรหัสระหว่างประเทศติดอยู่ด้านหน้า และอีกหมายเลขหนึ่งไม่ได้แนบรหัสระหว่างประเทศไว้ ไปข้างหน้า
การใช้อักขระเมตาเป็นสิ่งที่ดีสำหรับการตรวจสอบความถูกต้องเมื่อผู้ใช้กรอกแบบฟอร์มบนเว็บไซต์ เราต้องการตรวจสอบให้แน่ใจว่าได้ป้อนข้อมูลที่ถูกต้อง ซึ่งจะเป็นประโยชน์อย่างยิ่งต่อการใช้ RegEx เพื่อให้แน่ใจว่ารูปแบบของที่อยู่ อีเมล หรือหมายเลขโทรศัพท์เป็นรูปแบบที่ถูกต้อง สิ่งนี้นำไปสู่การจัดระเบียบฐานข้อมูลที่ดีขึ้นโดยมีข้อผิดพลาดของผู้ใช้น้อยลงเมื่อลงทะเบียนบัญชีใหม่
ป>
วิธีทดสอบ RegEx ใน Ruby
นี่คือโค้ดที่เราจะใช้เพื่อแยกความแตกต่างระหว่างการสแกนและการจับคู่:
ป>
#!/usr/bin/ruby
class RegexTest
def initialize(str, regex)
@str = str
@regex = regex
@result = str.scan(regex)
end
def display_details()
puts "String = #@str"
puts "regex = #@regex"
puts "result = #@result"
end
end
# Create Objects
str1 = RegexTest.new("The rain in Spain stays mainly on the plain", /\w+ain/)
str2 = RegexTest.new("In Hertford, Hereford, and Hampshire, hurricanes hardly ever happen", /H\w+/)
# Call Methods
str1.display_details()
str2.display_details()
สแกน
วิธีการสแกนใน Ruby ส่งคืนอาร์เรย์ของสตริงทั้งหมดที่ตรงกับนิพจน์ทั่วไปของคุณ:
ป>
str1:
str2:
สิ่งนี้ช่วยให้คุณทำทุกอย่างที่คุณต้องการด้วยผลลัพธ์
การจับคู่ RegExp
วิธีจับคู่นิพจน์ทั่วไปนั้นคล้ายกับการสแกนมาก แต่จะค้นหาอินสแตนซ์แรกของรายการที่ตรงกัน แทนที่จะค้นหารายการที่ตรงกันทั้งหมด เปลี่ยน @result =str.scan(regex) เป็น @result =str.match(regex) เพื่อดูความแตกต่าง:
str1:
str2:
อย่างไรก็ตาม Match จะส่งกลับอ็อบเจ็กต์
เกรป
Grep เป็นวิธีการนับสำหรับการค้นหาสตริงที่ตรงกันในอาร์เรย์ มันจะส่งคืนอาร์เรย์ของสตริงทั้งหมดที่ตรงกับนิพจน์ทั่วไปของคุณ ด้วยโค้ดที่เรามี เราต้องแน่ใจว่าสตริงที่เราส่งเข้าไปถูกแบ่งออกเป็นอาร์เรย์
หากต้องการทำสิ่งนี้ให้เปลี่ยนบรรทัดโค้ดนี้:
และเปลี่ยนเป็น:
"อาชีพกรรมเข้ามาในชีวิตของฉันเมื่อฉันต้องการมันมากที่สุดและช่วยให้ฉันเข้ากับหลักสูตรฝึกหัดได้อย่างรวดเร็ว สองเดือนหลังจากสำเร็จการศึกษา ฉันพบงานในฝันที่สอดคล้องกับค่านิยมและเป้าหมายในชีวิตของฉัน!"
Venus วิศวกรซอฟต์แวร์ที่ Rockbot
ค้นหาการแข่งขัน Bootcamp ของคุณ
จากนั้นคุณจะได้ผลลัพธ์ที่คล้ายกับผลลัพธ์แรก:
str1:
str2:
Str =~ RegEx
ใช้ =~ ตัวดำเนินการจับคู่ขั้นพื้นฐาน เราสามารถเปรียบเทียบสตริงกับนิพจน์ทั่วไปและส่งกลับดัชนีแรกของการจับคู่ได้ มันจะคืนค่าศูนย์หากไม่มีการแข่งขัน ป>
ในบทความนี้ เราได้กล่าวถึงวิธีใช้นิพจน์ทั่วไป (RegEx) ใน Ruby หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับสิ่งที่คุณสามารถสร้างได้ด้วย Ruby โปรดดูบทความของเรา ”โค้ด Ruby ใช้เพื่ออะไร ”
ต้องการวิธีที่ดีกว่าในการเรียนรู้ Ruby หรือไม่? ให้ Career Karma ช่วยคุณค้นหาโปรแกรมการฝึกอบรมที่ดีที่สุดสำหรับคุณ 04รหัส> ป> 18รหัส>
ป>
ป>
ป> 26รหัส> ป> 34รหัส>
ป>
ป>
ป> 47รหัส> ป> 59รหัส> ป> 
ป> 65รหัส> ป> 75รหัส>
ป> บทสรุป
ป>
ป>