นิพจน์ทั่วไป (นิพจน์ทั่วไป) อธิบายรูปแบบการจับคู่สตริง ซึ่งสามารถใช้เพื่อตรวจสอบว่าสตริงมีสตริงย่อยบางรายการ แทนที่สตริงย่อยที่ตรงกัน หรือแยกสตริงย่อยที่ตรงตามเงื่อนไขบางอย่างจากสตริงบางตัว
ฟังก์ชันนิพจน์ทั่วไปของภาษา Perl นั้นทรงพลังมาก โดยพื้นฐานแล้วเป็นภาษาที่ทรงพลังที่สุดในบรรดาภาษาที่ใช้กันทั่วไป หลายภาษาอ้างถึงนิพจน์ทั่วไปของ Perl เมื่อออกแบบการรองรับนิพจน์ทั่วไป
นิพจน์ทั่วไปของ Perl มีสามรูปแบบ ได้แก่ การจับคู่ การแทนที่ และการแปลง:
การจับคู่: ม./
การแทนที่: s/
การแปลงค่า: tr/
โดยทั่วไปทั้งสามรูปแบบจะใช้กับ =~ หรือ !~ , =~ หมายถึงการจับคู่ !~ หมายถึงไม่ตรงกัน
ตัวดำเนินการจับคู่ m// ใช้เพื่อจับคู่คำสั่งสตริงหรือนิพจน์ทั่วไป ตัวอย่างเช่น หากต้องการจับคู่ "run" ในสเกลาร์ $bar โค้ดจะเป็นดังนี้:
เมื่อรันโปรแกรมข้างต้น ผลลัพธ์ที่ได้คือ:
นัดแรก นัดสอง
การจับคู่รูปแบบมีตัวแก้ไขที่ใช้กันทั่วไป ดังที่แสดงในตารางต่อไปนี้:
| ตัวแก้ไข | อธิบาย |
|---|---|
| ฉัน | ละเว้นตัวพิมพ์เล็กและใหญ่ในรูปแบบ |
| ม | โหมดหลายบรรทัด |
| โอ | กำหนดค่าเพียงครั้งเดียว |
| ส | โหมดบรรทัดเดียว "." ตรงกับ "n" (ค่าเริ่มต้นไม่ตรงกัน) |
| x | ละเว้นช่องว่างในรูปแบบ |
| ก | การแข่งขันระดับโลก |
| ซีจี | หลังจากที่การจับคู่ส่วนกลางล้มเหลว สตริงที่ตรงกันจะได้รับอนุญาตให้ค้นหาอีกครั้ง |
หลังจากประมวลผล Perl แล้ว จะมีชื่อตัวแปรพิเศษสามชื่อสำหรับค่าที่ตรงกัน:
$`: ส่วนก่อนหน้าของสตริงที่ตรงกัน
$&: สตริงที่ตรงกัน
$': ยังไม่มีสตริงที่เหลืออยู่ที่ตรงกัน
หากคุณรวมตัวแปรทั้งสามนี้เข้าด้วยกัน คุณจะได้สตริงดั้งเดิม
ตัวอย่างมีดังนี้:
ผลลัพธ์ของการรันโปรแกรมข้างต้นคือ:
สตริงก่อนการจับคู่: ยินดีต้อนรับสู่สตริงก่อนการจับคู่: เรียกใช้สตริงหลังจากการจับคู่: oob site
ตัวดำเนินการแทนที่ s/// เป็นส่วนขยายของตัวดำเนินการที่ตรงกันและแทนที่สตริงที่ระบุด้วยสตริงใหม่ รูปแบบพื้นฐานมีดังนี้:
s/รูปแบบ/การเปลี่ยน/;
PATTERN คือรูปแบบที่ตรงกัน REPLACEMENT คือสตริงการแทนที่
ตัวอย่างเช่น เราแทนที่ "google" ในสตริงต่อไปนี้ด้วย "codercto":
ผลลัพธ์ของการรันโปรแกรมข้างต้นคือ:
ยินดีต้อนรับสู่เว็บไซต์ codercto
ตัวแก้ไขการดำเนินการทดแทนจะแสดงอยู่ในตารางต่อไปนี้:
| ตัวแก้ไข | อธิบาย |
|---|---|
| ฉัน | หากเพิ่ม "i" ลงในตัวแก้ไข นิพจน์ทั่วไปจะยกเลิกการพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ นั่นคือ "a" และ "A" เหมือนกัน |
| ม | ค่าเริ่มต้นปกติ "^" และจุดสิ้นสุด "$" ใช้สำหรับสตริงปกติเท่านั้น หากเพิ่ม "m" ลงในตัวแก้ไข จุดเริ่มต้นและจุดสิ้นสุดจะอ้างอิงถึงแต่ละบรรทัดของสตริง: จุดเริ่มต้นของแต่ละบรรทัดคือ "^ ", ลงท้ายด้วย "$" |
| โอ | นิพจน์จะถูกดำเนินการเพียงครั้งเดียว |
| ส | หากเพิ่ม "s" ลงในตัวแก้ไข ค่าเริ่มต้น "." ที่แสดงอักขระอื่นที่ไม่ใช่อักขระขึ้นบรรทัดใหม่จะกลายเป็นอักขระใดๆ รวมถึงอักขระขึ้นบรรทัดใหม่ด้วย! |
| x | หากเพิ่มตัวแก้ไขนี้ อักขระช่องว่างในนิพจน์จะถูกละเว้น เว้นแต่ว่าจะถูกหลีกไว้ |
| ก | แทนที่สตริงที่ตรงกันทั้งหมด |
| จ | แทนที่สตริงเป็นนิพจน์ |
ต่อไปนี้คือตัวแก้ไขที่เกี่ยวข้องกับตัวดำเนินการแปลง:
| ตัวแก้ไข | อธิบาย |
|---|---|
| ค | แปลงอักขระที่ไม่ได้ระบุทั้งหมด |
| ง | ลบอักขระที่ระบุทั้งหมด |
| ส | รวมอักขระเอาท์พุตที่เหมือนกันหลายตัวเป็นอันเดียว |
ตัวอย่างต่อไปนี้จะแปลงอักษรตัวพิมพ์เล็กทั้งหมดในตัวแปร $string ให้เป็นตัวพิมพ์ใหญ่:
#!/usr/bin/perl $string = 'ยินดีต้อนรับสู่ไซต์ codercto';$string =~ tr/az/Az/;print "$stringn";
ผลลัพธ์ของการรันโปรแกรมข้างต้นคือ:
ยินดีต้อนรับสู่เว็บไซต์ CODERCTO
ตัวอย่างต่อไปนี้ใช้ /s เพื่อลบอักขระที่ซ้ำกันออกจากตัวแปร $string:
ผลลัพธ์ของการรันโปรแกรมข้างต้นคือ:
รูน็อบ
ตัวอย่างเพิ่มเติม:
$string =~ tr/d/ /c; # แทนที่อักขระที่ไม่ใช่ตัวเลขทั้งหมดด้วยช่องว่าง $string =~ tr/t //d; # ลบแท็บและช่องว่าง $string =~ tr/0-9/ /cs # แทนที่อักขระอื่นระหว่างตัวเลขด้วยการเว้นวรรค
| การแสดงออก | อธิบาย |
|---|---|
| - | จับคู่อักขระทั้งหมด ยกเว้นอักขระขึ้นบรรทัดใหม่ |
| เอ็กซ์? | จับคู่ x สตริง 0 หรือหนึ่งครั้ง |
| เอ็กซ์* | จับคู่ x สตริง 0 ครั้งขึ้นไป แต่จับคู่จำนวนครั้งขั้นต่ำที่เป็นไปได้ |
| x+ | จับคู่สตริง x 1 ครั้งขึ้นไป แต่จับคู่จำนวนครั้งขั้นต่ำที่เป็นไปได้ |
| - | จับคู่อักขระใดๆ 0 หรือมากกว่าครั้ง |
| - | จับคู่ตัวละครใดๆ 1 ครั้งขึ้นไป |
| {ม} | ตรงกับสตริงที่ระบุ m ทุกประการ |
| {น,n} | จับคู่สตริงที่ระบุมากกว่า m และน้อยกว่า n |
| {น,} | จับคู่สตริงที่ระบุตั้งแต่ m ขึ้นไป |
| - | จับคู่อักขระภายใน [] |
| - | จับคู่อักขระที่ไม่ตรงกับ [] |
| [0-9] | จับคู่อักขระตัวเลขทั้งหมด |
| [อัซ] | จับคู่อักขระตัวอักษรตัวพิมพ์เล็กทั้งหมด |
| [^0-9] | จับคู่อักขระที่ไม่ใช่ตัวเลขทั้งหมด |
| [^อัซ] | จับคู่อักขระตัวอักษรที่ไม่ใช่ตัวพิมพ์เล็กทั้งหมด |
| - | จับคู่อักขระที่ขึ้นต้นด้วย |
| - | จับคู่อักขระที่อยู่ท้ายอักขระ |
| d | จับคู่อักขระตัวเลขซึ่งมีรูปแบบเดียวกับ [0-9] |
| d+ | จับคู่สตริงตัวเลขหลายรายการ ซึ่งมีไวยากรณ์เดียวกันกับ [0-9]+ |
| D | ไม่ใช่ตัวเลข เช่นเดียวกับตัวอื่นๆd |
| ดี+ | ไม่ใช่ตัวเลข เช่นเดียวกับ d+ สำหรับอื่นๆ |
| w | สตริงตัวอักษรหรือตัวเลขภาษาอังกฤษ รูปแบบเดียวกับ [a-zA-Z0-9_] |
| w+ | ไวยากรณ์เดียวกันกับ [a-zA-Z0-9_]+ |
| ว | สตริงตัวอักษรหรือตัวเลขที่ไม่ใช่ภาษาอังกฤษ ไวยากรณ์เดียวกับ [^a-zA-Z0-9_] |
| W+ | ไวยากรณ์เดียวกันกับ [^a-zA-Z0-9_]+ |
| s | ช่องว่าง ไวยากรณ์เดียวกับ [ntrf] |
| s+ | เช่นเดียวกับ [ntrf]+ |
| ส | ไม่ใช่ช่องว่าง ไวยากรณ์เดียวกับ [^ntrf] |
| ส+ | ไวยากรณ์เดียวกันกับ [^ntrf]+ |
| ข | จับคู่สตริงที่ล้อมรอบด้วยตัวอักษรภาษาอังกฤษและตัวเลข |
| บี | จับคู่สตริงที่ไม่ได้ล้อมรอบด้วยตัวอักษรภาษาอังกฤษหรือค่าตัวเลข |
| ก|ข|ค | จับคู่สตริงที่ตรงกับอักขระ อักขระ b หรืออักขระ c |
| เอบีซี | จับคู่สตริง (รูปแบบ) ที่มี abc () สัญลักษณ์นี้จะจดจำสตริงที่พบ ซึ่งเป็นไวยากรณ์ที่ใช้งานได้จริง สตริงที่พบในตัวแรก () จะกลายเป็นตัวแปร $1 หรือตัวแปร 1 ซึ่งเป็นสตริงที่พบในตัวที่สอง () กลายเป็นตัวแปร $2 หรือตัวแปร 2 เป็นต้น |
| /รูปแบบ/i | i พารามิเตอร์นี้หมายถึงการละเว้นตัวพิมพ์ภาษาอังกฤษ นั่นคือเมื่อจับคู่สตริง ปัญหาตัวพิมพ์ภาษาอังกฤษจะไม่ถูกพิจารณา หากคุณต้องการค้นหาอักขระพิเศษในโหมดรูปแบบ เช่น "*" คุณต้องเพิ่มไว้ข้างหน้านี้ อักขระ ใช้สัญลักษณ์ เพื่อทำให้อักขระพิเศษใช้ไม่ได้ |