การใช้งาน Meta characters ใน Regular Expressions ของ PHP
21 January 2011Meta-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:]]/
- หมายถึงช่องว่างทุกตัว
รายละเอียด ในแต่ละส่วน จะได้แนะนำในโอกาสต่อๆ ไป
บทความคนเข้าอ่านวันนี้
04 Oct 10 รู้จัก และใช้งาน php sdk สำหรับ facebook เพิ่มขึ้น อ่าน 2980 25 Sep 08 รู้จักฟังก์ชันของ jQuery ในการเรียกใช้ Class ใน CSS อ่าน 2778 03 Feb 11 การใช้งาน character classes ใน Regular Expressions ของ PHP อ่าน 1328 12 Aug 10 ประยุกต์ ใช้ jQuery สร้างข้อความเลื่อน ซ้าย ขวา คล้าย marquee อ่าน 2628 17 Jan 11 เทคนิค วิธี การแสดงข้อมูล ด้วยเงื่อนไข วันที่ date ใน mysql อ่าน 3400 27 May 10 ทบทวน ลำดับ การทำงาน mouse events ใน jQuery อ่าน 2393 01 Feb 10 การใช้งาน method delay() ใน jQuery 1.4 อ่าน 2772 16 Aug 09 เริ่มต้น jQuery UI กับการสร้าง ปฏิทินเลือกวันที่ datepicker อ่าน 17951 24 Feb 09 การใช้งาน CSS สำหรับกำหนดตำแหน่งตรึงไว้ชิดขอบล่าง อ่าน 4120 15 Sep 10 สร้าง ตัว marker ระบุตำแหน่ง ใน google map จำนวนมาก จาก xml ไฟล์ อ่าน 3832 18 Oct 08 สร้างเมนูแนวนอน ด้วย CSS ไม่ต้องใช้ตารางอย่างง่าย อ่าน 4265 18 Mar 10 การเก็บข้อมูลวันที่ ในฐานข้อมูล กับคำสั่ง sql ในการค้นหา อ่าน 4785 04 Jan 10 ดึงไฟล์ xml (rss) ไฟล์แบบ cross domain มาแสดงด้วย ajax ใน jQuery อย่างง่าย อ่าน 3700 09 Nov 11 แนวทางการสร้างเมนูหลายภาษา อย่างง่ายด้วย php และ javascript อ่าน 1205 22 Sep 11 แนวทาง การเลื่อนแล้ว fixed ตำแหน่งเนื้อหาที่ต้องการ ด้วย jQuery อ่าน 1196 27 Sep 10 วิธีใช้ css จัดรูปแบบ เนื้อหา contents ที่ต้องการแสดง บน google map อ่าน 2818 08 Feb 11 แท็บเมนู tab menu แนวตั้งอย่างง่าย ด้วย jQuery อ่าน 4115 04 Nov 10 การสร้าง json ไฟล์ จากฐานข้อมูล ด้วย php และการใช้งานด้วย jQuery getJSON() อ่าน 3389 09 Dec 09 การรวมไฟล์ javascript หรือไฟล์ css เป็นไฟล์เดียว ด้วย php อย่างง่าย อ่าน 1852 26 Mar 10 ความแตกต่าง ระหว่าง ฟังก์ชัน strstr กับ strrchr และ การประยุกต์ ใช้งาน อ่าน 1272
