|
Regular Expression หรือเรียกย่อๆว่า Regex หมายถึง รูปแบบของลำดับ
หรือกลุ่มของสัญลักษณ์ ที่ใช้แทนลำดับ หรือกลุ่มของอักขระตามที่ต้องการ
เราใช้สัญลักษณ์ [ ] (square brackets) เพื่อกำหนดขอบเขตของกลุ่มตัวอักขระหลายตัวที่ใช้เป็นตัวเลือก
เช่น สมมุติว่า เราต้องการจะเขียนรูปแบบที่ใช้แทนตัวอักขระหนึ่งตัว
อะไรก็ได้จาก {a,e,i,o,u} เราก็จะเขียนว่า [aeiou] โดยจะเรียงลำดับก่อนหลังอย่างไรก็ได้
เช่น [eioua] ให้ผลเหมือนกับ [aeoui] หรือ ถ้าเราต้องการเขียน
รูปแบบเพื่อใช้แทนตัวขระหนึ่งตัวที่เป็นตัวเลขตัวใดตัวหนึ่งจาก
0 ถึง 9 เราก็เขียนว่า [0123456789] หรือจะเขียนแบบสั้นๆใหม่ได้เป็น
[0-9] หรืออีกตัวอย่างหนึ่ง ถ้าเราต้องการจะเขียนนิพจน์แบบ regex
ขึ้นมา เพื่อใช้แทนอักขระตัวใดตัวหนึ่งที่เป็นได้ทั้งตัวพิมพ์ใหญ่หรือเล็กในภาษาอังกฤษหรือตัวเลขระหว่าง
0 ถึง 9 เราก็เขียนว่า [A-Za-z0-9]
| [aeiou] |
ตัวอักขระตัวหนึ่งจาก
{a,e,i,o,u} ตัวไหนก็ได้ |
| [0-9] |
ตัวอักขระตัวหนึ่งจาก
{0,1,...,9} ตัวไหนก็ได้ |
| [A-Za-z0-9] |
ตัวอักขระตัวหนึ่งจาก
{A,B,..,Z, a, b, ... , z, 0, 1, ... 9} ตัวไหนก็ได้ |
ถ้าเรามีข้อความแล้วเราต้องการจะค้นหาอักขระหรือลำดับของอักขระ
(หรือ pattern) ในข้อความเรานั้น เราเรียกขั้นตอนในการค้นหาตามรูปแบบนี้ว่า
pattern matching ในภาษา PHP จะมีฟังก์ชันที่เราใช้ในการค้นหาลำดับของตัวอักขระตามแบบที่ต้องการคือ
ereg() และ eregi()
และต่างกันตรงที่ว่า ฟังก์ชัน eregi() จะเปรียบเทียบโดยไม่คำนึงถึงเรื่องตัวพิมพ์เล็กหรือใหญ่
ตัวอย่างเช่น สมมุติว่า เรามีข้อความอยู่ในอาร์เรย์เป็นข้อความที่มีแค่ตัวอักขระตัวเดียว
แล้วเราต้องการจะหาว่า ตัวไหนบ้างที่เป็นตัวเลข 0 ถึง 9 บ้างและตัวไหนบ้างที่เป็นตัวพิมพ์ภาษาอังกฤษ
a, b, หรือ c เราก็เขียนสคริปต์โดยใช้ฟังก์ชัน ereg() ได้ดังนี้
<?
$a=array("0","1","2","3","5","7","a","b","c");
for ($i=0; $i < count($a); $i++) { // print
only digit
if ( ereg("[0-9]",$a[$i]) ) {
print ("$a[$i] <BR>\n");
}
}
?>
<HR>
<?
for ($i=0; $i < count($a); $i++) { // print
only a, b or c
if ( ereg("[a-c]",$a[$i]) ) {
print ("$a[$i] <BR>\n");
}
}
?> |
|