นิพจน์ทั่วไป (นิพจน์ทั่วไป) อธิบายรูปแบบการจับคู่สตริง ซึ่งสามารถใช้เพื่อตรวจสอบว่าสตริงมีสตริงย่อยบางรายการ แทนที่สตริงย่อยที่ตรงกัน หรือแยกสตริงย่อยที่ตรงตามเงื่อนไขบางอย่างจากสตริงบางตัว
ฟังก์ชันนิพจน์ทั่วไปของภาษา 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 พารามิเตอร์นี้หมายถึงการละเว้นตัวพิมพ์ภาษาอังกฤษ นั่นคือเมื่อจับคู่สตริง ปัญหาตัวพิมพ์ภาษาอังกฤษจะไม่ถูกพิจารณา หากคุณต้องการค้นหาอักขระพิเศษในโหมดรูปแบบ เช่น "*" คุณต้องเพิ่มไว้ข้างหน้านี้ อักขระ ใช้สัญลักษณ์ เพื่อทำให้อักขระพิเศษใช้ไม่ได้ |