Meta-characters ใน Regular Expressions คือ การนำเอาตัวอักขระพิเศษ มาใช้งานในการกำหนด
รูปแบบ pattern ที่มีความซับซ้อน
โดยจะแบ่ง Meta-characters ออกเป็น 2 ส่วน คือ
1.ส่วนที่ใช้งานในการกำหนดรูปแบบ pattern ในทุกที่ ยกเว้นในเครื่องหมายปีกกาสี่เหลี่ยม [ ]
2.ส่วนที่ใช้งานในการกำหนดรูปแบบ pattern ได้ทั้งข้างในและนอก เครื่องหมายปีกกาสี่เหลี่ยม [ ]
1.ส่วนที่ใช้งานในการกำหนดรูปแบบ pattern ในทุกที่ ยกเว้นในเครื่องหมายปีกกาสี่เหลี่ยม [ ]
\
ใช้เมื่อมีการนำเอา ตัวอักขระพิเศษ มาใช้ในการกำหนดรูปแบบ pattern
ตัวอักขระพิเศษ
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
ตัวอย่างเช่น ต้องการหาว่า มีเครื่องหมาย $ หรือไม่ สามารถกำหนด เป็น
/\$/
^
ใช้เมื่อต้องการตรวจสอบว่า เป็น คำ ตัวอักษร หรือข้อความที่ขึ้นต้นบรรทัด หรือไม่
ซึ่งหมายถึง คำ ตัวอักษร หรือข้อความนั้นๆ ต้องอยู่ข้างหน้าสุด ของบรรทัดเสมอ
( เป็นการขึ้นต้นบรรทัดใหม่จาก \n ไม่ใช่ <br> และไม่มีช่องว่างหน้าคำนั้นๆ)
ตัวอย่างเช่น มีข้อความในตัวแปรอยู่ 3 บรรทัด ได้แก่
Blackpool
Blackburn
Liverpool
ต้องการตรวจสอบว่า คำว่า Black ที่ขึ้นต้นบรรทัด ทุกคำ จะสามารถกำหนดได้เป็น
/^Black/m
m คือ Pattern Modifiers ใช้สำหรับ ให้ทำการเช็ครูปแบบ pattern ในทุก บรรทัด ที่ขึ้นต้นบรรทัด
ใหม่จาก \n อ่านเพิ่มเติมที่
http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
ตัวอย่างการใช้งานกับฟังก์ชัน preg_replace() ใน php โดยเงื่อนไข คือ ให้ทำการขีดเส้นใต้ คำว่า Black ที่ขึ้นต้นบรรทัดทั้งหมด
<?php $data_test="Blackpool Blackhawk Blackburn Liverpool"; echo preg_replace('/(^Black)/m','<u>$1</u>',$data_test); ?>
จากตัวอย่างโค้ดด้านบน จะเห็นว่ามีการขีดเส้นใต้คำว่า Black ที่ขึ้นต้นบรรทัด ที่คำว่า Blackpool และ Blackburn ยกเว้นคำว่า Black ใน Blackhawk ที่ไม่ได้ขีดเส้นใต้ ซึ่งไม่เข้าเงื่อนไขของ pattern
เพราะไม่ได้อยู่ขึ้นต้นบรรทัด
ซึ่งกรณีถ้า หากต้องการให้คำว่า Black ทุกคำขึดเส้นใต้ ให้เอา ^ ออก ก็จะได้เป้น
<?php $data_test="Blackpool Blackhawk Blackburn Liverpool"; echo preg_replace('/(Black)/m','<u>$1</u>',$data_test); ?>
$
ใช้เมื่อต้องการตรวจสอบว่า ลงท้ายประโยคหรือบรรทัดด้วย คำ ตัวอักษร หรือข้อความที่กำหนด หรือไม่
ซึ่งหมายถึง คำ ตัวอักษร หรือข้อความนั้นๆ ต้องอยู่ท้ายประโยค ก่อนขึ้นบรรทัดใหม่เสมอ
( เป็นการขึ้นต้นบรรทัดใหม่จาก \n ไม่ใช่ <br> และไม่มีช่องว่างหลังคำนั้นๆ)
ตัวอย่างเช่น มีข้อความในตัวแปรอยู่ 3 บรรทัด ได้แก่
Blackpool
Blackburn
Liverpool
ต้องการตรวจสอบว่า คำว่า pool ที่ลงท้ายประโยคหรือบรรทัด จะสามารถกำหนดได้เป็น
/pool$/m
m คือ Pattern Modifiers ใช้สำหรับ ให้ทำการเช็ครูปแบบ pattern ในทุก บรรทัด ที่ขึ้นต้นบรรทัด
ใหม่จาก \n อ่านเพิ่มเติมที่
http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
ตัวอย่างการใช้งานกับฟังก์ชัน preg_replace() ใน php โดยเงื่อนไข คือ ให้ทำการขีดเส้นใต้ pool ที่ลงท้ายประโยคหรือบรรทัด ทั้งหมด
<?php $data_test="Blackpool Blackhawk Blackburn Liverpool"; echo preg_replace('/(pool$)/m','<u>$1</u>',$data_test); ?>
จากตัวอย่างโค้ดด้านบน จะเห็นว่ามีการขีดเส้นใต้คำว่า pool ที่ลงท้ายประโยคหรือบรรทัด ที่คำว่า Liverpool
ยกเว้นคำว่า pool ใน Blackpool ที่ไม่ได้ขีดเส้นใต้ ซึ่งไม่เข้าเงื่อนไขของ pattern เพราะไม่ได้
ลงท้ายประโยคหรือบรรทัดด้วยคำว่า pool
ซึ่งกรณีถ้า หากต้องการให้คำว่า pool ทุกคำขึดเส้นใต้ ให้เอา $ ออก ก็จะได้เป้น
<?php $data_test="Blackpool Blackhawk Blackburn Liverpool"; echo preg_replace('/(pool)/m','<u>$1</u>',$data_test); ?>
. (จุด)
ใช้สำหรับตรวจสอบเงื่อนไข แทนตัวอักษรไดก็ได้ ยกเว้นการขึ้นบรรทัดใหม่ (\n ไม่ใช่ <br>)
ตัวอย่างเช่น รูปแบบ pattern คือ
/g..gle/
จะหมายถึงว่า . (จุด) 2 อันสามารถเป็นตัวอักษรอะไรก็ได้
ดังนั้นคำว่า google หรือ geegle หรือ g55gle จึงเข้าเงื่อนไข รูปแบบ pattern ข้างต้น
[
ใช้สำหรับเป็น ตัวอักขระเริ่มต้น ในการกำหนดการใช้งาน Character classes
]
เป็นตัวอักขระสำหรับปิด การใช้งานในส่วน Character classes
ตัวอย่างการใช้งาน ตัวอักขระเปิด และปิด สำหรับ Character classes
รูปแบบ pattern /[online]/
- หมายถึงตัวอักษรทุกตัว ใน [] จะเข้าเงื่อนไข คือเป็นตัว o n l i หรือ e ซึ่งจะอยู่ตรงไหนก็ได้
โดยไม่ได้หมายถึงว่าต้องเป็น คำว่า online ถึงจะเข้าเงื่อนไข
(การใช้งานเกี่ยวกับ Character classes จะได้นำมาอธิบายต่อๆไป)
|
ใช้สำหรับกำหนดทางเลือก ให้กับรูปแบบ pattern
ตัวอย่างเช่น
รูปแบบ pattern /(.gif)|(.png)|(.jpg)|(.jpeg)/
- หมายถึง ข้อความว่า .gif หรือ .png หรือ .jpg หรือ .jpeg จะเข้าเงื่อนไข
(
เป็นตัวอักขระเริ่มต้น เปิดใช้ ส่วนการกำหนดกลุ่ม pattern ย่อย
)
เป็นตัวอักขระปิดการใช้ ส่วนการกำหนดกลุ่ม pattern ย่อย
ตัวอย่างการใช้งานตัวอักขระเปิดและ ปิดการใช้ ส่วนการกำหนดกลุ่ม pattern ย่อย
ตัวอย่างเช่น
รูปแบบ pattern /(.gif)|(.png)|(.jpg)|(.jpeg)/
- จะเห็นว่าใน รูปแบบ pattern จะมี subpattern อยู่ในวงเล็ม () ซึ่งมีทั้งหมด 4 subpattern
คือ (.gif) (.png) (.jpg) และ (.jpeg)
?
เป็นตัวอักขระ สำหรับกำหนดจำนวนตัวอักษรใช้ในกรณี
หมายถึง มี 1 ตัวหรือไม่มีก็ได้
ตัวอย่างเช่น
รูปแบบ pattern /.jpe?g/
- หมายถึง มีตัว e 1 ตัว หรือไม่มีก็ได้ ดังนั้น .jpg และ .jpeg จึงเงื่อนไข
รูปแบบ pattern /bi.?d/
- หมายถึง มีตัวอักษรอะไรก็ได้ 1 ตัว หรือไม่มีก็ได้ ต่อจากคำว่า bi และต่อด้วยตัว d
ดังนั้น
bid ก็จะเข้าเงื่อนไข เพราะ ไม่มีตัวที่่ต่อจาก bi
bird ก็จะเข้าเงื่อนไข เพราะ มีตัว r 1 ตัว ต่อจากคำว่า bi
birod จะไม่เข้าเงื่อนไข เพราะ มีตัว r และ o ต่อจากคำว่า bi ซึ่งรวมกันมากกว่า 1 ตัว
*
เป็นตัวอักขระ สำหรับกำหนดจำนวนตัวอักษรใช้ในกรณี
หมายถึง ไม่มี หรือมีก็ตัวก็ได้
ตัวอย่างเช่น
รูปแบบ pattern /g*gle/
- หมายถึง มีตัว g หรือไม่มีก็ได้ และต่อด้วยคำว่า gle
ดังนั้น
google จึงเข้าเงื่อนไข เพราะมีตัว g ก่อน แล้วมีการต่อด้วย gle
gggle จึงเข้าเงื่อนไข เพราะมีตัว g ก่อนกี่ตัวก็ได้ แล้วมีการต่อด้วย gle
oogle จึงเข้าเงื่อนไข เพราะไม่มีตัว g แล้วมีการต่อด้วย gle
single จึงเข้าเงื่อนไข เพราะไม่มีตัว g แล้วมีการต่อด้วย gle
+
เป็นตัวอักขระ สำหรับกำหนดจำนวนตัวอักษรใช้ในกรณี
หมายถึง จะมีกี่ตัวก็ได้ไม่จำกัด แต่ต้องมีอย่างน้อย 1 ตัว
ตัวอย่างเช่น
รูปแบบ pattern /g+gle/
- หมายถึง มีตัว g อย่างน้อย 1 ตัวหรือมากกว่า แล้วต้องต่อด้วย gle เลย
ดังนั้น
google จึงไม่เข้าเงื่อนไข แม้มีตัว g ก่อน อย่างน้อย 1 ตัว แต่ต่อ oo ก่อนที่จะต่อด้วย gle
gggle จึงเข้าเงื่อนไข เพราะมีตัว g ก่อน อย่างน้อย 1 ตัว แล้วมีการต่อด้วย gle
oogle จึงไม่เข้าเงื่อนไข เพราะไม่มีตัว g ก่อน อย่างน้อย 1 ตัว ก่อนที่จะต่อด้วย gle
{
เป็นอักขระสำหรับ เปิด การกำหนดจำนวนตัวอักษร ต่ำสุุด และมากสุด ที่ต้องมี
}
เป็นอักขระสำหรับ ปิด การกำหนดจำนวนตัวอักษร ต่ำสุุด และมากสุด ที่ต้องมี
ตัวอย่างเช่น มีข้อความ 3 ข้อความ
google
gooogle
gooooogle
รูปแบบ pattern /go{1}gle/
- หมายถึง มีตัว g ตามด้วยตัว o 1 ตัวแล้วต่อด้วย gle
google ไม่เข้าเงื่อนไข เพราะ มีตัว o 2 ตัว
gooogle ไม่เข้าเงื่อนไข เพราะ มีตัว o 3 ตัว
gooooogle ไม่เข้าเงื่อนไข เพราะ มีตัว o 5 ตัว
รูปแบบ pattern /go{2,4}gle/
- หมายถึง มีตัว g ตามด้วยตัว o อย่างน้อย 2 ตัวแต่ไม่เกิน 4 ตัว แล้วต่อด้วย gle
google เข้าเงื่อนไข เพราะ มีตัว o 2 ตัว อยู่ ระหว่าง 2 ถึง 4 ตัว
gooogle เข้าเงื่อนไข เพราะ มีตัว o 3 ตัว อยู่ ระหว่าง 2 ถึง 4 ตัว
gooooogle ไม่เข้าเงื่อนไข เพราะ มีตัว o 5 ตัว เกิน 4 ตัว
2.ส่วนที่ใช้งานในการกำหนดรูปแบบ pattern ได้ทั้งข้างในและนอก เครื่องหมายปีกกาสี่เหลี่ยม [ ]
\
ใช้เมื่อมีการนำเอา ตัวอักขระพิเศษ มาใช้ในการกำหนดรูปแบบ pattern
ตัวอักขระพิเศษ
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
ตัวอย่างเช่น ต้องการหาว่า มีเครื่องหมาย $ หรือไม่ สามารถกำหนด เป็น
/[\$]/
^
กำหนดตรงกันข้ามกับ character class โดย กำหนดไว้ด้านหน้าเท่านั้น
ตัวอย่าง รูปแบบ pattern
/[^aioue]/
- หมายถึง ตัวอักขระทุกตัว ที่ไม่ใช่ ตัว a i o u และ e
ซึ่งตรงข้ามกับ รูปแบบ pattern
/[aioue]/
- หมายถึง ตัวอักขระที่เป็นตัว a i o u และ e
-
ใช้สำหรับกำหนด ช่วงของการใช้งาน character class
ตัวอย่างเช่น
[a-z] หมายถึง ตัวอักษร a ถึง z ตัวพิมพ์เล็ก
[A-Z] หมายถึง ตัวอักษร A ถึง Z ตัวพิมพ์ใหญ่
[0-9] หมายถึง ตัวเลข 0 - 9
]
ส่วนหรับปิดการใช้งาน character class
ตัวอย่าง รูปแบบ pattern
/[[:space:]]/
- หมายถึงช่องว่างทุกตัว
รายละเอียด ในแต่ละส่วน จะได้แนะนำในโอกาสต่อๆ ไป