อักขระคั่น (Delimiters) ในการใช้งาน Regular Expressions ของ PHP
เขียนเมื่อ 12 ปีก่อน โดย Ninenik Narkdeeregular expression php
คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ regular expression php
เมื่อมีการใช้งาน ฟังก์ชัน 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 ได้เลย

อ่านต่อที่บทความ
-
21 Jan2011การใช้งาน Meta characters ใน Regular Expressions ของ PHP อ่าน 13,468
Meta-characters ใน Regular Expressions คือ การนำเอาตัวอักขระพิเศษ มาใช้งานในการก
เนื้อหาที่เกี่ยวข้อง
-
กำลังอ่านเนื้อหานี้อยู่19 Jan2011อักขระคั่น (Delimiters) ในการใช้งาน Regular Expressions ของ PHP อ่าน 16,774
เมื่อมีการใช้งาน ฟังก์ชัน Regular Expressions รูปแบบ pattern จะต้องปิดด้วย อักขร
-
21 Jan2011การใช้งาน Meta characters ใน Regular Expressions ของ PHP อ่าน 13,468
Meta-characters ใน Regular Expressions คือ การนำเอาตัวอักขระพิเศษ มาใช้งานในการก
-
03 Feb2011การใช้งาน character classes ใน Regular Expressions ของ PHP อ่าน 21,183
รูปแบบการขึ้นต้นด้วย เครื่องหมายปีกกาสี่เหลี่ยมเปิด ( [ ) และปิดด้วยด้วยเครื่องห