ย่อมาจาก นิพจน์ทั่วไป regex คือสตริงข้อความที่ให้คุณสร้างรูปแบบที่ช่วยจับคู่ค้นหาและจัดการข้อความ Perl เป็นตัวอย่างที่ดีของภาษาโปรแกรมที่ใช้นิพจน์ทั่วไป อย่างไรก็ตามเป็นเพียงหนึ่งในหลาย ๆ สถานที่ที่คุณสามารถค้นหานิพจน์ทั่วไป นิพจน์ทั่วไปสามารถใช้จากบรรทัดคำสั่งและในตัวแก้ไขข้อความเพื่อค้นหาข้อความภายในไฟล์
เมื่อพยายามเข้าใจนิพจน์ทั่วไปครั้งแรกดูเหมือนว่าจะเป็นภาษาอื่น อย่างไรก็ตามการจัดทำนิพจน์ทั่วไปสามารถช่วยให้คุณประหยัดเวลาหลายพันชั่วโมงหากคุณทำงานกับข้อความหรือต้องแยกวิเคราะห์ข้อมูลจำนวนมาก ด้านล่างนี้เป็นตัวอย่างของนิพจน์ทั่วไปที่มีส่วนประกอบของแต่ละรายการ นิพจน์ทั่วไปนี้จะแสดงในตัวอย่างการเขียนโปรแกรม Perl ที่แสดงในภายหลังในหน้านี้
พื้นฐานของการแสดงออกปกติ (แผ่นโกง)
การดูตัวอย่างด้านบนอาจทำให้คุณรู้สึกท่วมท้น อย่างไรก็ตามเมื่อคุณเข้าใจไวยากรณ์พื้นฐานของวิธีการที่คำสั่งนิพจน์ทั่วไปทำงานคุณสามารถอ่านตัวอย่างข้างต้นได้ราวกับว่าคุณกำลังอ่านประโยคนี้ น่าเสียดายที่ไม่ใช่โปรแกรมคำสั่งและภาษาการเขียนโปรแกรมทั้งหมดที่ใช้นิพจน์ทั่วไปที่เหมือนกัน แต่ทั้งหมดนั้นมีความคล้ายคลึงกัน
ตัวละคร | มันทำอะไร? | ตัวอย่าง | ไม้ขีด |
---|---|---|---|
^ | ตรงกับจุดเริ่มต้นของบรรทัด | ^ abc | abc, abcdef .., abc123 |
$ | ตรงกับจุดสิ้นสุดของบรรทัด | abc $ | ของฉัน: abc, 123abc, theabc |
. | ตรงกับตัวละครใด ๆ | ไฟฟ้ากระแสสลับ | abc, asg, a2c |
| | หรือผู้ประกอบการ | abc | xyz | abc หรือ xyz |
( ... ) | จับภาพทุกสิ่งที่ตรงกัน | (ก) ข (c) | จับ 'a' และ 'c' |
(? ... ) | กลุ่มที่ไม่ได้จับภาพ | (ก) ข (? c) | จับ 'a' แต่เฉพาะกลุ่ม 'c' |
[ ... ] | ตรงกับสิ่งที่อยู่ในวงเล็บ | [abc] | a, b หรือ c |
[^ ... ] | จับคู่สิ่งที่ไม่มีอยู่ในวงเล็บ | [^ abc] | xyz, 123, 1de |
[az] | จับคู่อักขระใด ๆ ระหว่าง 'a' และ 'z' | [BZ] | bc, จิตใจ, xyz |
{x} | จำนวน 'x' ที่แน่นอนในการจับคู่ | (ABC) {2} | abcabc |
{x} | จับคู่ 'x' จำนวนครั้งหรือมากกว่า | (ABC) {2} | abcabc, abcabcabc |
{x, y} | จับคู่กันระหว่าง 'x' และ 'y' ครั้ง | (ก) {2, 4} | aa, aaa, aaaaa |
* * * * | การแข่งขันโลภที่ตรงกับทุกอย่างในสถานที่ของ * | AB * ค | abc, abbcc, abcdc |
+ | จับคู่อักขระก่อน + หนึ่งครั้งขึ้นไป | A + C | ac, aac, aaac, |
? | ตรงกับตัวละครก่อนหน้า? ศูนย์หรือหนึ่งครั้ง นอกจากนี้ยังใช้เป็นการแข่งขันที่ไม่โลภ | AB? C | ac, abc |
\ | หลบหนีตัวละครหลังจากแบ็กสแลชหรือสร้างลำดับการหลบหนี | เป็น \ SC | ไฟฟ้ากระแสสลับ |
ตัวละครหนี (ลำดับหนี)
หมายเหตุ: อักขระเลี่ยงจะคำนึงถึงขนาดตัวพิมพ์
ตัวละคร | มันทำอะไร? |
---|---|
\ | อักขระใด ๆ ที่ไม่ได้กล่าวถึงด้านล่างนำหน้าด้วย \ จะถูกหลบหนี ตัวอย่างเช่น, \. จับคู่จุดและไม่ทำหน้าที่ดังกล่าวข้างต้น อักขระที่ควรหลีกเลี่ยงคือ () [] {} ^ $ | * +? \ |
\ 0 | อักขระ Null |
\ a | ตรงกับเสียงระฆังหรือสัญญาณเตือน |
\ ข | ขอบเขตของ Word ในเกือบหรือ backspace |
\ B | ขอบเขตของคำที่ไม่ใช่ |
\ d | ตรงกับหลักทศนิยมใด ๆ (0-9) |
\ D | จับคู่ที่ไม่ใช่ตัวเลขใด ๆ |
\ E | ตรงกับการหลบหนี |
\ ฉ | จับคู่ฟีดฟอร์ม |
\ n | ตรงกับบรรทัดใหม่ |
\ Q ... \ E | ละเว้นความหมายพิเศษใด ๆ ในสิ่งที่กำลังจับคู่ |
\ r | ตรงกับการคืนรถ |
\ s | จับคู่อักขระช่องว่าง (เว้นวรรค, \ t, \ r, \ n) |
\ S | จับคู่อักขระช่องว่างที่ไม่ใช่สีขาว |
\ t | จับคู่แท็บ |
\ วี | จับคู่แท็บแนวตั้ง |
w \ | จับคู่อักขระคำใดคำหนึ่ง [a-zA-Z_0-9] |
\ W | จับคู่อักขระที่ไม่ใช่คำใดคำหนึ่ง |
ธงการแสดงออกปกติ
นอกแฟล็กนิพจน์ทั่วไป (ตอนจบ) สามารถใช้เพื่อช่วยในการจับคู่รูปแบบ
ตัวละคร | มันทำอะไร? |
---|---|
ผม | ไม่สนใจเคส (อนุญาตให้ใช้ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก) |
ม. | การแข่งขันแบบหลายสาย |
s | ตรงกับบรรทัดใหม่ |
x | อนุญาตช่องว่างและความคิดเห็น |
J | อนุญาตชื่อกลุ่มซ้ำ |
ยู | Ungreedy match |
ตัวอย่างภาษานิพจน์ปกติของการเขียนโปรแกรม Perl
ด้านล่างนี้เป็นตัวอย่างของการแสดงผลปกติและการจับคู่รูปแบบใน Perl ตัวอย่างเหล่านี้จำนวนมากมีความคล้ายคลึงหรือคล้ายกับภาษาการเขียนโปรแกรมและโปรแกรมอื่นที่สนับสนุนนิพจน์ทั่วไป
$ data = ~ s / ข้อมูลไม่ดี / ข้อมูลที่ดี / i;
ตัวอย่างข้างต้นแทนที่ "ข้อมูลที่ไม่ดี" ด้วย "ข้อมูลที่ดี" โดยใช้การจับคู่แบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ดังนั้นหากตัวแปร $ data คือ "นี่คือข้อมูลที่ไม่ดี" มันจะกลายเป็น "นี่คือข้อมูลที่ดี"
$ data = ~ s / a / A /;
ตัวอย่างนี้แทนที่ a ตัวพิมพ์เล็กใด ๆ ด้วยตัวพิมพ์ใหญ่ A ดังนั้นหากข้อมูล $ เป็น "ตัวอย่าง" มันจะกลายเป็น "exAmple"
$ data = ~ s / [az] / * /;
ตัวอย่างข้างต้นแทนที่ตัวอักษรตัวเล็กใด ๆ a ถึง z ด้วยเครื่องหมายดอกจัน ดังนั้นถ้าข้อมูล $ เป็น "ตัวอย่าง" มันจะกลายเป็น "E ******"
$ data = ~ s / e $ / es /;
ตัวอย่างนี้ใช้อักขระ $ ซึ่งจะบอกให้นิพจน์ทั่วไปจับคู่ข้อความก่อนหน้าในตอนท้ายของสตริง ดังนั้นถ้าข้อมูล $ เป็น "ตัวอย่าง" มันจะกลายเป็น "ตัวอย่าง"
$ data = ~ s /\./!/;
ในตัวอย่างข้างต้นเรากำลังแทนที่จุดด้วยเครื่องหมายอัศเจรีย์ เนื่องจากจุดนั้นเป็นตัวอักษรเมตาหากคุณป้อนจุดโดยไม่ใช้ \ (ยกเว้น) จึงถือว่าเป็นอักขระใด ๆ ในตัวอย่างนี้ถ้าข้อมูล $ เป็น "ตัวอย่าง" มันจะกลายเป็น "ตัวอย่าง!" อย่างไรก็ตามถ้าคุณไม่มีทางหลบหนีมันจะแทนที่ตัวละครทุกตัวและกลายเป็น "!!!!!!!!"
$ data = ~ s / ^ e / E /;
ในตัวอย่างข้างต้นตัวอย่างคาเร็ต (^) บอกให้นิพจน์ทั่วไปจับคู่อะไรก็ได้ที่จุดเริ่มต้นของบรรทัด ในตัวอย่างนี้สิ่งนี้จะจับคู่ตัวพิมพ์เล็กใด ๆ ที่จุดเริ่มต้นของบรรทัดและแทนที่ด้วยตัวพิมพ์ใหญ่ E ดังนั้นหาก $ data เป็น "ตัวอย่าง" มันจะกลายเป็น "ตัวอย่าง"
เคล็ดลับ: หากคุณต้องการสำรวจนิพจน์ทั่วไปยิ่งขึ้นในคำสั่งเช่น grep หรือนิพจน์ทั่วไปในภาษาของการเขียนโปรแกรมให้ดูที่หนังสือ O'Reilly "Mastering regular expressions"
ตัวย่อของคอมพิวเตอร์, ลำดับการหลีกเลี่ยง, การแสดงออก, Glob, ตัวละคร Meta, เงื่อนไขการเขียนโปรแกรม, Tilde, Wildcard