PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum

อักขระคั่น (Delimiters) ในการใช้งาน Regular Expressions ของ PHP

19 January 2011 By


เมื่อมีการใช้งาน ฟังก์ชัน Regular Expressions รูปแบบ pattern จะต้องปิดด้วย อักขระคั่นเสมอ
โดยอักขระคั่นที่สามารถกำหนดได้ เป็นดังนี้
- ไม่เป็นตัวอักษร
- ไม่เป็น  เครื่องหมาย  backslash  ( \ )
- ไม่เป็นช่องว่าง

โดยทั่วไปจะใช้เครื่องหมาย forward slashes ( / ) ,hash signs (#) และ tildes (~)

ตัวอย่างรูปแบบการใช้งาน อักขระคั่น ที่มีรูปแบบถูกต้อง

/foo bar/   --- ใช้ /
#^[^0-9]$#   --- ใช้ #
+php+   --- ใช้ +
%[a-zA-Z0-9_-]%  --- ใช้ %

ในกรณีมีการใช้ตัวอักขระคั่นใน pattern สามารถเลี่ยงการเกิด error โดยการใช้เครื่องหมาย backslash ( \ ) เช่น

มีการใช้ตัวอักขระคั่นคือ /  กับคำว่า http://
รูปแบบ pattern ที่ยังไม่ถูกต้อง จะเป็น

/http:///

จะเห็นว่ามีการใช้ / ซี่งเป็นอักขระคั่นใน pattern คือในข้อความว่า http:// ดังนั้น เพื่อให้รูปแบบ pattern ถูกต้อง
จึงต้องใช้เครื่องหมาย backslash ( \ ) 
จะได้รูปแบบ pattern ที่ถูกต้องดังนี้คือ

/http:\/\//

ได้จากการเปลี่ยน // ใน pattern เป็น \/\/

หรือจะใช้วิธีการเปลี่ยนตัวอักขระคั่นอื่นแทน เพื่อให้อ่านได้ง่ายขึ้น เช่นใช้เครื่องหมาย hash sign ( # ) แทน
จะได้เป็น

#http://#

นอกจากนั้น ยังสามารถใช้ฟังก์ชัน preg_quote() ใน php เพื่อหลีกเลี่ยงปัญหา การกำหนด ตัวอักขระพิเศษใน
pattern ซื่งได้แก่ 

. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

รวมถึงตัวอักขระคั่น ที่ใช้ใน pattern ด้วย

ตัวอย่าง

<?php
$data_test2="http://www.google.com";
$my_pattern="http://";
$my_pattern=preg_quote($my_pattern,'/');
echo preg_match('/'.$my_pattern.'/',$data_test2); // ผลลัพธ์ เท่ากับ 1
// กรณีรูปแบบไม่ซับซ้อน เราสามารถเขียนเข้าไปในส่วนใช้งานโดยตรงได้
// โดยตัดบรรทัดที่ 3 กับ 4 ออก
// แล้วเปลี่บน บรรทัดที่ 5 เป็น
// echo preg_match('/http\:\/\//',$data_test2); // ผลลัพธ์ เท่ากับ 1
?>

อธิบาย
จากตัวอย่าง ต้องการหาว่า ตัวแปร $data_test2 มีรูปแบบข้อความ http://
ตามตัวแปร $my_pattern อยู่หรือไม่

แต่เนื่องจากตัวแปร $my_pattern มีตัวขระพิเศษ คือ : (colon) และตัวอักขระคั่น คือ //
อยู่ จึงจำเป็นต้องกำหนดรูปแบบ pattern ให้ถูกต้องก่อน

โดยการใช้ ฟังก์ชัน preg_quote ตามโค้ดด้านบน  บรรทัดที่ 4
ซึ่งจะทำให้ได้รูปแบบ pattern  เป็น http://

เมื่อทำการทดสอบ จะได้ผลลัพธ์เท่ากับ 1 คือหมายถึง มีคำว่า http:// อยุ่
หากต้องการทดสอบว่า ถ้าไม่ใช้คำสั่ง preg_quote จะมีผลอย่างไร? ให้ทำการ comment บรรทัดที่ 4
แล้วทดสอบ รันผลลัพธ์ดู

เราสามารถกำหนด เงื่อนไขการตรวจสอบรูปแบบ pattern โดยการเพิ่ม pattern modifiers เช่น
ตัวอย่างเบื้องต้นในที่นี้ คือตัวอักษร i เงื่อนไขคือ เป็นตัวพิมพ์เล็ก หรือตัวพิมพ์ใหญ่ ก็ได้ ซึ่งจะได้
รูปแบบ pattern ดังนี้

/http\:\/\//i

ตัวอย่างการใช้งานใน php

<?php
$data_test2="HTTP://www.google.com";
echo preg_match('/http\:\/\//i',$data_test2);  // ผลลัพธ์ เท่ากับ 1
?>


สามารถศึกษาเพิ่มเติมได้ด้วยตัวเองที่
http://www.php.net/manual/en/regexp.introduction.php


หมายเหตุ::
เนื้อหาข้างต้นเป็นการอธิบายตามความเข้าใจของผู้เขียน ซึ่งเพิ่งจะศึกษาเกี่ยวกับ
Regular Expressions ของ PHP  โดยอ้างอิงจากลิ้งค์

http://www.php.net/manual/en/regexp.reference.delimiters.php

ดังนั้น เพื่อความเข้าใจที่ถูกต้อง แนะนำให้ศึกษาจาก ลิ้งค์ดังกล่าวโดยตรง
ส่วนใคร ที่ต้องการศึกษาไปพร้อมๆ กับผู้เขียน ก็ติดตามเนื้อหา เกี่ยวกับ
Regular Expressions ของ PHP ได้ที่นี้ www.ninenik.com ได้เลย




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



Tags:: php regular expression





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