
"และตอนนี้ ฉันจะบอกคุณเกี่ยวกับ Regular Expression หัวข้อนี้ทั้งซับซ้อนและเรียบง่ายในเวลาเดียวกัน หากต้องการเข้าใจ Regular Expression อย่างถ่องแท้ คุณอาจต้องอ่านหนังสือหนักๆ สองหรือสามเล่ม แต่ฉันสามารถสอนวิธีใช้พวกมันได้ ตอนนี้."
"โปรแกรมเมอร์ที่มีประสบการณ์ชอบพูดเล่นถ้าคุณมีปัญหาและคิดว่าจะแก้ปัญหาด้วย Regular Expression ตอนนี้คุณมีสองปัญหา"
"อืม."
“ฉันหวังว่าฉันจะไม่ทำให้นายตกใจมากเกินไปนะเพื่อน ไม่นะ?”
"โอเค ดี หัวข้อใหม่ของเราคือ Regular Expression"
"ถ้าเราลดความซับซ้อนมากเกินไป นิพจน์ทั่วไปจะเป็นรูปแบบสำหรับสตริง"
"คุณสามารถตรวจสอบว่าสตริงตรงกับรูปแบบที่กำหนดหรือไม่คุณยังสามารถแยกสตริงออกเป็นส่วนๆ โดยใช้ตัวคั่นหรือรูปแบบ"
"แต่ขอเริ่มด้วยสิ่งง่ายๆ: รูปแบบคืออะไร "
"ใน SQL (แต่ไม่ใช่ใน Java) คุณสามารถตรวจสอบว่าสตริงตรงกับรูปแบบใดรูปแบบหนึ่งหรือไม่ นี่คือลักษณะที่ปรากฏ:"
name like 'Alex%'
นี่คือชื่อตัวแปร เช่น เป็นคำสั่งสำหรับตรวจสอบรูปแบบ และ "Alex%" เป็นรูปแบบ
ในกรณีนี้ % หมายถึงสตริงหรือสตริงย่อยใดๆ
ลวดลาย | สตริงที่ตรงกับรูปแบบ |
---|---|
'อเล็กซ์%' | อเล็กซ์ อเล็กซ์ andr อเล็กซ์ ander อเล็กซ์ andra …. |
'%x%' | Ma x Ma x im Ale x andr … |
'%ก' | Olg a Helen a Ir a … |
"ใน SQL หากคุณต้องการระบุว่าควรมีอักขระอื่นเพียงตัวเดียว คุณควรใช้อักขระขีดล่าง: "_"
ลวดลาย | สตริงที่ตรงกับรูปแบบ |
---|---|
'อเล็กซ์%_' | อเล็กซ์ andr อเล็กซ์ ander อเล็กซ์ andra …. |
'_x' | ขวาน Bx Cx … |
'___' | อ้า อ้า บ บบบบ … |
"นั่นสมเหตุสมผลแล้ว"
"เอาล่ะ ต่อไปเราจะใช้นิพจน์ทั่วไป"
"โดยปกตินิพจน์ทั่วไปจะมีการจำกัดไม่เพียงแต่จำนวนอักขระเท่านั้น แต่ยังรวมถึง 'เนื้อหา' ด้วย "มาสก์ใดๆ มักจะประกอบด้วยสองส่วน (บางครั้งอาจมากกว่านั้น): ส่วนแรกอธิบายถึง 'การตั้งค่า' ของอักขระ และส่วนที่สองอธิบายถึงจำนวนอักขระ "
"นี่คือ ตัวอย่าง เนื้อหา บางส่วน :"
ลวดลาย | คำอธิบาย | ตัวอย่าง |
---|---|---|
. | ตัวละครใดตัวละครหนึ่ง | 1 |
\d | ตัวเลขใดก็ได้ | 7 |
\D | ที่ไม่ใช่ตัวเลข | ค |
\s | ช่องว่าง ตัวแบ่งบรรทัด หรืออักขระแท็บ | ' ' |
\S | ทุกอย่างยกเว้นช่องว่าง แท็บ และตัวแบ่งบรรทัด | ฉ |
[แอซ] | ตัวอักษรใด ๆ จาก a ถึง z | ซี |
[0-9] | ตัวเลขใดก็ได้ตั้งแต่ 0 ถึง 9 | 8 |
\w | ตัวอักษรคำใดก็ได้ | ค |
\ว | อักขระที่ไม่ใช่คำใดๆ | _ |
"ฉันจะจำสิ่งเหล่านั้นไม่ได้ แต่มันก็ดูไม่ยากเกินไป"
"ดีมาก ต่อไปนี้คือตัวอย่างจำนวนอักขระในหน้ากาก: "
ลวดลาย | คำอธิบาย | ตัวอย่าง |
---|---|---|
เอ? | อักขระ 'A' เกิดขึ้นเพียงครั้งเดียวหรือไม่มีเลย | ก |
บี+ | อักขระ 'B' เกิดขึ้นอย่างน้อยหนึ่งครั้ง | บีบีบี |
ค* | อักขระ 'C' เกิดขึ้นตั้งแต่ศูนย์ครั้งขึ้นไป | ซี.ซี.ซี |
ดี{n} | อักขระ 'D' เกิดขึ้น n ครั้ง | รูปแบบ D{4} ตรงกับ DDDD |
เ{n,} | อักขระ 'E' เกิดขึ้น n ครั้งขึ้นไป | รูปแบบ E{2,} ตรงกับ EEEEEEE |
ฟ{n,m} | อักขระ 'F' เกิดขึ้นระหว่าง n และ m ครั้ง | รูปแบบ E{2,4} ตรงกับ EEEE |
"ทั้งหมดนั้นดูค่อนข้างตรงไปตรงมา"
"คุณกำลังไล่ตามทุกอย่างอย่างรวดเร็ว ตอนนี้เรามาดูกันว่าภาพรวมเป็นอย่างไร:"
ลวดลาย | คำอธิบาย | ตัวอย่าง |
---|---|---|
[โฆษณา]? | อักขระระหว่าง 'a' และ 'd' เกิดขึ้นเพียงครั้งเดียวหรือไม่เกิดขึ้นเลย | เอบีซีดี |
[bd,z]+ | อักขระ 'b', 'c', 'd' หรือ 'z' เกิดขึ้นอย่างน้อยหนึ่งครั้ง | ข, bcdcdbdbdbdbzzzzbbzbzb, zbz |
[1,7-9]* | ตัวเลข 1, 7, 8 หรือ 9 เกิดขึ้นตั้งแต่ศูนย์ครั้งขึ้นไป | 1, 7, 9, 9777, 111199 |
1{5} | หลัก 1 เกิดขึ้น 5 ครั้ง | 11111 |
[1,2,ก,ข]{2} | สัญลักษณ์ 1, 2, 'a' หรือ 'b' เกิดขึ้นสองครั้ง | 11, 12, 1a, ab, 2b, bb, 22 |
[ก,0]{2,3} | สัญลักษณ์ 'a' หรือ 0 เกิดขึ้น 2 หรือ 3 ครั้ง | aa, a0,00,0a, aaa,000, a00,0a0, a0a |
"ยังคงชัดเจนทั้งหมด"
“จริงเหรอ อืม ไม่ว่าฉันจะอธิบายทุกอย่างดีหรือไม่ก็คุณเข้าใจเร็วเกินไป เอาล่ะ นั่นก็เป็นเรื่องดีสำหรับเรา”
"นี่คือข้อมูลเชิงลึกใหม่สองสามข้อสำหรับคุณ"
"เนื่องจากนิพจน์ทั่วไปมักจะใช้เพื่อค้นหาสตริงย่อย เราจึงสามารถเพิ่มอักขระได้อีกสองตัว (^ และ $) ในรูปแบบของเรา"
"^ หมายความว่าสตริงย่อยต้องมีจุดเริ่มต้นของสตริง"
"$ หมายความว่าสตริงย่อยต้องมีจุดสิ้นสุดของสตริง"
"นี่คือตัวอย่างบางส่วน:"
ลวดลาย | สตริงและสตริงย่อยที่ตรงกับรูปแบบ |
---|---|
ก{3} | อ๊าาาาาาาาาาาาาา _ _ _ _ |
{3}$ | อ๊าาาาาาาาาาาาาา _ |
^a{3} | อ๊าาาาาาาาาาาาาา _ |
^a{3}$ | อ๊าาาาาาาาาาาาาา |
"และอีกหนึ่งจุดสำคัญ"
"ในนิพจน์ทั่วไป อักขระต่อไปนี้มีความหมายพิเศษ: [ ] \ / ^ $ . | ? * + ( ) { } อักขระเหล่านี้เรียกว่าอักขระควบคุม ดังนั้นคุณไม่สามารถใช้อักขระเหล่านี้ในสตริงได้"
"เช่นเดียวกับในโค้ด Java พวกเขาจะต้องหนี "และเช่นเดียวกับในโค้ด Java จะใช้อักขระ '\' สำหรับสิ่งนี้"
"ถ้าเราต้องการอธิบายสตริงที่ประกอบด้วย '?' สามตัว อักขระ เราไม่สามารถเขียน '?{3}' ได้ เนื่องจาก '?' เป็นอักขระควบคุม เราต้องทำดังนี้: \?{3} ถ้าเราต้องการใช้อักขระ '\' เราก็จำเป็นต้องเขียน '\\'"
"ตกลง เข้าใจแล้ว"
"และนี่คือเกร็ดเล็กเกร็ดน้อยที่น่าสนใจอีกข้อหนึ่ง ในไฟล์ที่มีโค้ด Java อักขระ '\' ต้องเป็นอักขระหลีกในสตริงด้วย เนื่องจากเป็นอักขระควบคุม"
"แน่นอน."
"ดังนั้น หากคุณพยายามกำหนดนิพจน์ทั่วไปของ Java ในสตริง คุณต้องหลีกอักขระ '\' สองครั้ง"
"นี่คือตัวอย่าง:"
ฉันต้องการหน้ากากที่ตรงกับ 'c:\anything' |
ในทางทฤษฎี นิพจน์ทั่วไปควรมีลักษณะดังนี้: อักขระ 'c' หนึ่งตัว ทวิภาค แบ็ กสแลช จุด และเครื่องหมายดอกจัน (เพื่อแสดงอักขระจำนวนเท่าใดก็ได้) ฉันเพิ่มช่องว่างเพื่อปรับปรุงการอ่าน: c : \ .* แต่อักขระ '\' และ '.' ต้องหนี ดังนั้นนิพจน์ทั่วไปจะมีลักษณะดังนี้: c : \\ \ * หรือไม่มีช่องว่าง c: \\ \ * |
"เราควรมีแบ็กสแลชสามตัวใน Regular Expression นั่นหมายความว่าในไฟล์ Java นิพจน์ทั่วไปจะมีลักษณะดังนี้:" String regexp = "c: \\\\ \\. *"; |
"ว้าว! โอ้ ตอนนี้ฉันรู้แล้ว"
"และถ้าคุณตัดสินใจที่จะเจาะลึกลงไปกว่านี้ ต่อไปนี้คือลิงค์ดีๆ 2-3 ลิงค์:"
GO TO FULL VERSION