การใช้งาน Meta characters ใน Regular Expressions ของ PHP

เขียนเมื่อ 13 ปีก่อน โดย Ninenik Narkdee
php regular expression

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ php regular expression

ดูแล้ว 14,371 ครั้ง


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:]]/
- หมายถึงช่องว่างทุกตัว


รายละเอียด ในแต่ละส่วน จะได้แนะนำในโอกาสต่อๆ ไป

 



กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ



อ่านต่อที่บทความ









เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ