เมื่อมีการใช้งาน ฟังก์ชัน 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 ได้เลย