PHP - นิพจน์ทั่วไป
นิพจน์ทั่วไปไม่มีอะไรมากไปกว่าลำดับหรือรูปแบบของอักขระเท่านั้น เป็นรากฐานสำหรับฟังก์ชันการจับคู่รูปแบบ
การใช้นิพจน์ทั่วไปคุณสามารถค้นหาสตริงเฉพาะภายในสตริงอื่นคุณสามารถแทนที่สตริงหนึ่งด้วยสตริงอื่นและคุณสามารถแบ่งสตริงออกเป็นหลาย ๆ ส่วนได้
PHP นำเสนอฟังก์ชันเฉพาะสำหรับฟังก์ชันนิพจน์ทั่วไปสองชุดซึ่งแต่ละฟังก์ชันจะสอดคล้องกับนิพจน์ทั่วไปบางประเภท คุณสามารถใช้สิ่งใดก็ได้ตามความสะดวกสบายของคุณ
- POSIX นิพจน์ทั่วไป
- นิพจน์ทั่วไปสไตล์ PERL
POSIX นิพจน์ทั่วไป
โครงสร้างของนิพจน์ทั่วไป POSIX ไม่แตกต่างจากนิพจน์ทางคณิตศาสตร์ทั่วไปองค์ประกอบต่างๆ (ตัวดำเนินการ) จะรวมกันเพื่อสร้างนิพจน์ที่ซับซ้อนมากขึ้น
นิพจน์ทั่วไปที่ง่ายที่สุดคือนิพจน์ที่จับคู่อักขระเดี่ยวเช่น g ภายในสตริงเช่น g, haggle หรือ bag
ให้คำอธิบายสำหรับแนวคิดบางอย่างที่ใช้ในนิพจน์ทั่วไปของ POSIX หลังจากนั้นเราจะแนะนำคุณด้วยฟังก์ชันที่เกี่ยวข้องกับนิพจน์ทั่วไป
วงเล็บ
วงเล็บ ([]) มีความหมายพิเศษเมื่อใช้ในบริบทของนิพจน์ทั่วไป ใช้เพื่อค้นหาช่วงของอักขระ
ซีเนียร์ No | นิพจน์และคำอธิบาย |
---|---|
1 | [0-9] ตรงกับตัวเลขทศนิยมใด ๆ ตั้งแต่ 0 ถึง 9 |
2 | [a-z] มันจับคู่อักขระใด ๆ จากตัวพิมพ์เล็ก a ถึงตัวพิมพ์เล็ก z |
3 | [A-Z] จับคู่อักขระใด ๆ จากตัวพิมพ์ใหญ่ A ถึงตัวพิมพ์ใหญ่ Z |
4 | [a-Z] จับคู่อักขระใด ๆ จากตัวพิมพ์เล็ก a ถึงตัวพิมพ์ใหญ่ Z |
ช่วงที่แสดงด้านบนเป็นช่วงทั่วไป คุณยังสามารถใช้ช่วง [0-3] เพื่อจับคู่เลขฐานสิบใดก็ได้ตั้งแต่ 0 ถึง 3 หรือช่วง [bv] เพื่อจับคู่อักขระตัวพิมพ์เล็กตั้งแต่ b ถึง v
Quantifiers
ความถี่หรือตำแหน่งของลำดับอักขระในวงเล็บและอักขระเดี่ยวสามารถแสดงได้ด้วยอักขระพิเศษ อักขระพิเศษแต่ละตัวมีความหมายแฝงเฉพาะ ปุ่ม +, *,?, {int. range} และแฟล็ก $ ทั้งหมดเป็นไปตามลำดับอักขระ
ซีเนียร์ No | นิพจน์และคำอธิบาย |
---|---|
1 | p+ ตรงกับสตริงที่มีอย่างน้อยหนึ่ง p |
2 | p* ตรงกับสตริงใด ๆ ที่มีค่า p เป็นศูนย์ขึ้นไป |
3 | p? ตรงกับสตริงใด ๆ ที่มีศูนย์หรือหนึ่งพี |
4 | p{N} ตรงกับสตริงที่มีลำดับของ N พี |
5 | p{2,3} ตรงกับสตริงใด ๆ ที่มีลำดับของสองหรือสาม p |
6 | p{2, } ตรงกับสตริงใด ๆ ที่มีลำดับอย่างน้อยสอง p |
7 | p$ มันจับคู่สตริงใด ๆ กับ p ที่ท้ายของมัน |
8 | ^น มันจับคู่สตริงใด ๆ กับ p ที่จุดเริ่มต้นของมัน |
ตัวอย่าง
ตัวอย่างต่อไปนี้จะทำให้แนวคิดของคุณชัดเจนเกี่ยวกับอักขระที่ตรงกัน
ซีเนียร์ No | นิพจน์และคำอธิบาย |
---|---|
1 | [^a-zA-Z] จับคู่สตริงที่ไม่มีอักขระใด ๆ ตั้งแต่ a ถึง z และ A ถึง Z |
2 | p.p มันจับคู่สตริงที่มี p ตามด้วยอักขระใด ๆ แล้วตามด้วยอีก p |
3 | ^.{2}$ ตรงกับสตริงที่มีอักขระสองตัว |
4 | <b>(.*)</b> ตรงกับสตริงใด ๆ ที่อยู่ภายใน <b> และ </b> |
5 | p(hp)* มันจับคู่สตริงใด ๆ ที่มี ap ตามด้วยอินสแตนซ์ของลำดับ php ที่เป็นศูนย์หรือมากกว่า |
ช่วงอักขระที่กำหนดไว้ล่วงหน้า
เพื่อความสะดวกในการเขียนโปรแกรมของคุณมีช่วงอักขระที่กำหนดไว้ล่วงหน้าหลายช่วงหรือที่เรียกว่าคลาสอักขระ คลาสอักขระระบุช่วงทั้งหมดของอักขระตัวอย่างเช่นตัวอักษรหรือชุดจำนวนเต็ม -
ซีเนียร์ No | นิพจน์และคำอธิบาย |
---|---|
1 | [[:alpha:]] ตรงกับสตริงที่มีอักขระตามตัวอักษร aA ถึง zZ |
2 | [[:digit:]] ตรงกับสตริงที่มีตัวเลข 0 ถึง 9 |
3 | [[:alnum:]] ตรงกับสตริงใด ๆ ที่มีอักขระตัวเลขและตัวอักษร aA ถึง zZ และ 0 ถึง 9 |
4 | [[:space:]] ตรงกับสตริงใด ๆ ที่มีช่องว่าง |
ฟังก์ชัน Regexp POSIX ของ PHP
ปัจจุบัน PHP มีฟังก์ชันเจ็ดอย่างสำหรับการค้นหาสตริงโดยใช้นิพจน์ทั่วไปสไตล์ POSIX -
ซีเนียร์ No | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | ereg () ฟังก์ชัน ereg () ค้นหาสตริงที่ระบุโดยสตริงสำหรับสตริงที่ระบุโดยรูปแบบโดยส่งคืนค่า true หากพบรูปแบบและเป็นเท็จ |
2 | ereg_replace () ฟังก์ชัน ereg_replace () ค้นหาสตริงที่ระบุโดยรูปแบบและแทนที่รูปแบบด้วยการแทนที่หากพบ |
3 | เอเรกิ () ฟังก์ชัน eregi () ค้นหาตลอดทั้งสตริงที่ระบุโดยรูปแบบสำหรับสตริงที่ระบุโดยสตริง การค้นหาไม่คำนึงถึงขนาดตัวพิมพ์ |
4 | eregi_replace () ฟังก์ชัน eregi_replace () ทำงานเหมือนกับ ereg_replace () ทุกประการยกเว้นว่าการค้นหารูปแบบในสตริงไม่คำนึงถึงขนาดตัวพิมพ์ |
5 | แยก () ฟังก์ชัน split () จะแบ่งสตริงออกเป็นองค์ประกอบต่างๆขอบเขตของแต่ละองค์ประกอบตามการเกิดขึ้นของรูปแบบในสตริง |
6 | แยก () ฟังก์ชัน spliti () ทำงานในลักษณะเดียวกับการแยกพี่น้อง () ทุกประการยกเว้นว่าจะไม่คำนึงถึงขนาดตัวพิมพ์ |
7 | sql_regcase () ฟังก์ชัน sql_regcase () สามารถคิดว่าเป็นฟังก์ชันยูทิลิตี้โดยแปลงอักขระแต่ละตัวในสตริงพารามิเตอร์อินพุตเป็นนิพจน์วงเล็บที่มีอักขระสองตัว |
นิพจน์ทั่วไปสไตล์ PERL
นิพจน์ทั่วไปสไตล์ Perl จะคล้ายกับคู่ของ POSIX ไวยากรณ์ POSIX สามารถใช้แทนกันได้เกือบทั้งหมดกับฟังก์ชันนิพจน์ทั่วไปสไตล์ Perl ในความเป็นจริงคุณสามารถใช้ตัวระบุปริมาณใดก็ได้ที่แนะนำในส่วน POSIX ก่อนหน้านี้
ให้คำอธิบายสำหรับแนวคิดบางอย่างที่ใช้ในนิพจน์ทั่วไป PERL หลังจากนั้นเราจะแนะนำคุณด้วยฟังก์ชันที่เกี่ยวข้องกับนิพจน์ทั่วไป
อักขระเมตา
อักขระเมตาเป็นเพียงอักขระตามตัวอักษรที่นำหน้าด้วยแบ็กสแลชซึ่งทำหน้าที่ให้ความหมายพิเศษรวมกัน
ตัวอย่างเช่นคุณสามารถค้นหาเงินจำนวนมากโดยใช้อักขระเมตา '\ d': /([\d]+)000/, ที่นี่ \d จะค้นหาสตริงของอักขระตัวเลข
ต่อไปนี้เป็นรายการอักขระเมตาที่สามารถใช้ในนิพจน์ทั่วไปสไตล์ PERL
Character Description
. a single character
\s a whitespace character (space, tab, newline)
\S non-whitespace character
\d a digit (0-9)
\D a non-digit
\w a word character (a-z, A-Z, 0-9, _)
\W a non-word character
[aeiou] matches a single character in the given set
[^aeiou] matches a single character outside the given set
(foo|bar|baz) matches any of the alternatives specified
ตัวปรับเปลี่ยน
มีตัวดัดแปลงหลายตัวที่สามารถทำให้การทำงานของคุณกับ regexps ง่ายขึ้นมากเช่นความไวของตัวพิมพ์เล็กค้นหาในหลายบรรทัดเป็นต้น
Modifier Description
i Makes the match case insensitive
m Specifies that if the string has newline or carriage
return characters, the ^ and $ operators will now
match against a newline boundary, instead of a
string boundary
o Evaluates the expression only once
s Allows use of . to match a newline character
x Allows you to use white space in the expression for clarity
g Globally finds all matches
cg Allows a search to continue even after a global match fails
ฟังก์ชันที่เข้ากันได้กับ Regexp PERL ของ PHP
PHP นำเสนอฟังก์ชันต่อไปนี้สำหรับการค้นหาสตริงโดยใช้นิพจน์ทั่วไปที่เข้ากันได้กับ Perl -
ซีเนียร์ No | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | preg_match () ฟังก์ชัน preg_match () จะค้นหาสตริงสำหรับรูปแบบโดยส่งคืนค่า true หากมีรูปแบบอยู่และเป็นเท็จ |
2 | preg_match_all () ฟังก์ชัน preg_match_all () จะจับคู่รูปแบบที่เกิดขึ้นทั้งหมดในสตริง |
3 | preg_replace () ฟังก์ชัน preg_replace () ทำงานเหมือนกับ ereg_replace () ยกเว้นว่าสามารถใช้นิพจน์ทั่วไปในรูปแบบและพารามิเตอร์อินพุตทดแทนได้ |
4 | preg_split () ฟังก์ชัน preg_split () ทำงานเหมือนกับการแยก () ทุกประการยกเว้นว่านิพจน์ทั่วไปได้รับการยอมรับเป็นพารามิเตอร์อินพุตสำหรับรูปแบบ |
5 | preg_grep () ฟังก์ชัน preg_grep () จะค้นหาองค์ประกอบทั้งหมดของ input_array โดยส่งคืนองค์ประกอบทั้งหมดที่ตรงกับรูปแบบ regexp |
6 | preg_ quote () อ้างอักขระนิพจน์ทั่วไป |