การแสดงออกปกติ Perl
regex (regular expression) อธิบายชุดของสตริงที่สามารถใช้เพื่อตรวจสอบว่าสตริงย่อยมีบางอย่างที่ตรงกับ substring ไม่เปลี่ยนหรือลบเงื่อนไขตรงกับสตริงย่อยจากสตริง เป็นต้น
ฟังก์ชั่น regex Perl ของภาษาที่มีประสิทธิภาพมากพื้นภาษาทั่วไปมีประสิทธิภาพมากที่สุดในการออกแบบภาษาสนับสนุนการแสดงออกหลายปกติเมื่อมีการอ้างอิงนิพจน์ปกติ Perl
สามรูปแบบของการแสดงออกปกติ Perl จะถูกจับคู่, ทดแทนและการแปลง:
การจับคู่: m /
/ (นอกจากนี้ยังเรียกโดยย่อว่า / / m ละเว้น) แทนที่: S /
/ / การแปลง: TR /
/ /
ทั้งสามรูปแบบและมัก= ~ หรือ ~กับการใช้งาน = ~ แสดงให้เห็นถึงการแข่งขัน! ~ กล่าวว่าพวกเขาไม่ตรงกับ
ผู้ประกอบการแข่งขัน
การแข่งขันประกอบเมตร // ใช้เพื่อให้ตรงกับสตริงหรือคำสั่งที่แสดงออกปกติตัวอย่างเช่นเพื่อให้ตรงกับบาร์เกลา $ ใน "Run" รหัสดังต่อไปนี้:
#!/usr/bin/perl $bar = "I am w3big site. welcome to w3big site."; if ($bar =~ /run/){ print "第一次匹配\n"; }else{ print "第一次不匹配\n"; } $bar = "run"; if ($bar =~ /run/){ print "第二次匹配\n"; }else{ print "第二次不匹配\n"; }
โปรแกรมข้างต้นผลลัพธ์คือ:
第一次匹配 第二次匹配
การปรับเปลี่ยนรูปแบบการจับคู่
มีบางรูปแบบทั่วไปการปรับเปลี่ยนการจับคู่มีดังต่อไปนี้:
การปรับเปลี่ยน | ลักษณะ |
---|---|
ผม | ละเว้นโหมดโครงสร้างเงินทุน |
ม. | โหมดหลายสาย |
โอ | ที่ได้รับมอบหมายเพียงครั้งเดียวเท่านั้น |
s | โหมดบรรทัดเดียว "." จับคู่ "\ n" (เริ่มต้นไม่ตรง) |
x | ละเว้นโหมดว่างเปล่า |
ก. | การแข่งขันระดับโลก |
เซนติกรัม | หลังจากความล้มเหลวของการจับคู่โลกที่จะช่วยให้การหาการจับคู่สายอีกครั้ง |
ตัวแปร regex
Perl จะมีอยู่หลังจากการประมวลผลเพื่อให้ตรงกับค่าของสามชื่อตัวแปรพิเศษ:
- ส่วนหน้าของส่วนการจับคู่สาย: $ `
- $ &: การจับคู่สาย
- $ ': ไม่ตรงกับสายที่เหลือ
หากทั้งสามตัวแปรร่วมกันคุณจะได้รับสายเดิม
ตัวอย่างมีดังนี้
#!/usr/bin/perl $string = "welcome to w3big site."; $string =~ m/run/; print "匹配前的字符串: $`\n"; print "匹配的字符串: $&\n"; print "匹配后的字符串: $'\n";
เอาท์พุทโปรแกรมข้างต้นเป็น:
匹配前的字符串: welcome to 匹配的字符串: run 匹配后的字符串: oob site.
ผู้ประกอบการชดเชย
ผู้ประกอบการ /// เปลี่ยนตัวผู้ประกอบการคือเพื่อให้ตรงกับการขยายตัวของการใช้งานของสตริงใหม่เพื่อแทนที่สตริงที่ระบุ รูปแบบพื้นฐานจะเป็นดังนี้:
s/PATTERN/REPLACEMENT/;
รูปแบบเพื่อให้ตรงกับรูปแบบการเปลี่ยนเพื่อแทนที่สตริง
ยกตัวอย่างเช่น "google" เราจะเข้ามาแทนที่สตริงต่อไปนี้คือ "w3big":
#!/usr/bin/perl $string = "welcome to google site."; $string =~ s/google/w3big/; print "$string\n";
เอาท์พุทโปรแกรมข้างต้นเป็น:
welcome to w3big site.
ปรับปรุงการดำเนินการแทนที่
แทนที่ปรับปรุงการดำเนินการดังต่อไปนี้:
การปรับเปลี่ยน | ลักษณะ |
---|---|
ผม | ถ้าคุณเพิ่ม "ฉัน" ในปรับปรุงแล้วไวกรณีปกติจะถูกยกเลิก "A" และ "A" จะเหมือนกัน |
ม. | เริ่มต้นเริ่มต้นปกติ "^" และจุดสิ้นสุด "$" เป็นเพียงสตริงปกติถ้าคู่กับ "M" ปรับปรุงแล้วจุดเริ่มต้นและจุดสิ้นสุดของแต่ละสายจะอ้างถึงสตริง: ที่จุดเริ่มต้นของแต่ละบรรทัดคือ "^" ท้ายที่สุดก็คือ "$." |
โอ | การแสดงออกจะถูกดำเนินการเพียงครั้งเดียว |
s | ถ้าคุณเพิ่ม "S" ในปรับปรุงแล้วเริ่มต้น. "" ในนามของตัวอักษรใด ๆ ยกเว้นการขึ้นบรรทัดใหม่จะกลายเป็นตัวละครใด ๆ รวมทั้งการขึ้นบรรทัดใหม่เป็น! |
x | ถ้าคุณเพิ่มปรับปรุงการแสดงออกของตัวละครว่างเปล่าจะถูกละเว้นเว้นแต่จะได้รับการหลบหนี |
ก. | แทนที่สตริงที่ตรงกันทั้งหมด |
E | ในฐานะที่เป็นนิพจน์สตริงทดแทน |
ผู้ประกอบการแปลง
ต่อไปนี้เป็นผู้ประกอบการปรับเปลี่ยนแปลงที่เกี่ยวข้อง:
การปรับเปลี่ยน | ลักษณะ |
---|---|
C | แปลงของตัวละครทั้งหมดที่ไม่ได้ระบุไว้ |
D | ลบตัวอักษรที่ระบุทั้งหมด |
s | การส่งออกหดเดียวกันส่วนใหญ่ของตัวละคร |
ตัวอย่างต่อไปนี้ $ ตัวแปรสตริงในตัวอักษรพิมพ์เล็กทั้งหมดแปลงเป็นตัวพิมพ์ใหญ่:
#!/usr/bin/perl $string = 'welcome to w3big site.'; $string =~ tr/a-z/A-z/; print "$string\n";
เอาท์พุทโปรแกรมข้างต้นเป็น:
WELCOME TO w3big SITE.
ตัวอย่างต่อไปนี้ใช้ตัวแปร $ สตริง / S ตัวอักษรลบซ้ำ:
#!/usr/bin/perl $string = 'w3big'; $string =~ tr/a-z/a-z/s; print "$string\n";
เอาท์พุทโปรแกรมข้างต้นเป็น:
runob
ตัวอย่างเพิ่มเติมได้ที่:
$string =~ tr/\d/ /c; # 把所有非数字字符替换为空格 $string =~ tr/\t //d; # 删除tab和空格 $string =~ tr/0-9/ /cs # 把数字间的其它字符替换为一个空格。
กฎการแสดงออกมากกว่าปกติ
การแสดงออก | ลักษณะ |
---|---|
. | ตรงกับตัวละครทุกตัวยกเว้นการขึ้นบรรทัดใหม่ |
X? | การแข่งขัน 0 หรือ x สตริง |
x * | การแข่งขัน 0 ครั้งหรือมากกว่า x สตริง แต่จำนวนขั้นต่ำของการแข่งขันที่เป็นไปได้ |
x + | การแข่งขัน 1 ครั้งหรือมากกว่า x สตริง แต่จำนวนขั้นต่ำของการแข่งขันที่เป็นไปได้ |
. * | การแข่งขัน 0 ครั้งหรือมากกว่าตัวอักษรใด ๆ |
. + | การแข่งขัน 1 ครั้งหรือมากกว่าโดยตัวอักษรใด ๆ |
{m} | ตรงกับสตริงที่ระบุเมตร |
{m, n} | ตรงกันเมตรหรือมากกว่าหรือน้อยกว่าที่ระบุสตริง n |
{m} | Match เมตรหรือสตริงที่ระบุเพิ่มเติม |
[] | ซึ่งตรงกับตัวละครภายใน [A] |
[^] | แข่งขันไม่ได้พบกับตัวละครใน [] |
[0-9] | ตรงกับตัวอักษรตัวเลขทั้งหมด |
[Az] | ตรงกับตัวอักษรตัวพิมพ์เล็กทั้งหมด |
[^ 0-9] | ตรงกับทุกตัวละครที่ไม่ใช่ตัวเลข |
[^ Az] | ตรงกับตัวอักษรตัวพิมพ์เล็ก ๆ |
^ | เป็นตัวละครที่ตรงกับจุดเริ่มต้น |
$ | ตรงกับตัวละครในตอนท้ายของตัวละครตัวนี้ |
\ D | ตรงกับตัวละครหลักและ [0-9] ไวยากรณ์เดียวกัน |
\ D + | ตรงกับสตริงตัวเลขหลายและ [0-9] + ไวยากรณ์เป็น |
\ D | ไม่ใช่ดิจิตอลอื่น ๆ ที่มี \ D |
\ D + | ไม่ใช่ดิจิตอลอื่น ๆ ที่มี \ D + |
\ W | สตริงของตัวอักษรหรือตัวเลขและ [a-zA-Z0-9] ไวยากรณ์เป็น |
\ W + | และ [a-zA-Z0-9] + ไวยากรณ์เป็น |
\ W | ตัวอักษรที่ไม่ใช่ภาษาอังกฤษหรือตัวเลขสตริงและ [^ A-ZA-Z0-9] ไวยากรณ์เดียวกัน |
\ W + | และ [^ A-ZA-Z0-9] + ไวยากรณ์เป็น |
\ S | ช่องว่างและ [\ n \ t \ r \ F] ไวยากรณ์เดียวกัน |
\ S + | และ [\ n \ t \ r \ F] + เป็น |
\ S | ไม่ใช่ช่องว่างและ [^ \ n \ t \ r \ F] ไวยากรณ์เดียวกัน |
\ S + | และ [^ \ n \ t \ r \ F] + ไวยากรณ์เป็น |
\ B | ตัวอักษรภาษาอังกฤษตัวเลขสตริงขอบเขตการจับคู่ |
\ B | ตรงกันในตัวอักษรสตริงเขตแดนตัวเลข |
a | b | C | ในบรรทัดที่มีสายอักขระที่ตรงกับตัวอักษรหรือตัวอักษร B หรือค |
เอบีซี | เอบีซีจับคู่สาย (รูปแบบ) ประกอบด้วย () จะจำได้ว่าสัญลักษณ์นี้เพื่อหาสตริงมันเป็นไวยากรณ์ที่มีประโยชน์มาก. สตริงแรก (ภายใน) พบตัวแปรนี้จะกลายเป็น $ 1 หรือ \ 1 ตัวแปรที่สอง (ภายใน) พบว่ามีตัวแปรสตริงเป็นตัวแปร $ 2 หรือ \ 2 และอื่น ๆ ลง |
/ รูปแบบ / i | ผมพารามิเตอร์นี้บ่งชี้ว่าไม่สนใจกรณีที่ในภาษาอังกฤษนั่นคือเมื่อสตริงการแข่งขันไม่สนใจคำถามกรณีที่ในภาษาอังกฤษ. \ ถ้าคุณต้องการที่จะหาอักขระพิเศษในโหมดรูปแบบเช่น "*" จะต้องมีการเพิ่มในด้านหน้าของตัวละคร ใน \ สัญลักษณ์นี้จะช่วยให้ตัวอักษรพิเศษล้มเหลว |