Regular Expressions (ตอนที่ 5)
Pattern Modifiers เป็น ตัวอักษรความคุมจำนวนหนึง เพื่อบอกให้ฟังก์ชั่นในกลุ่ม preg ปฏิบัติเพิ่มเติมหรือที่เรียกว่า flags กันละครับ ซึ่งค่า flags นี้จะเอาไว้นอก pattern ครับ และ flags เหล่านี้อาจมีใช้ไม่เหมือนกันในแต่ละภาษานะครับ สำหรับที่ผมจะกล่าวถึงต่อไปนี้เป็น flags เฉพาะของ ฟังก์ชั่นในกลุ่ม preg ของ PHP ครับ (ฟังก์ชั่นอื่นหรือภาษาอื่นก็อาจมีใช้ได้เหมือนกันให้ลองทดสอบดูครับ)
รูปแบบการใช้งานทั่วไป
preg_match('/pattern/isu', $data, $match);
isu ที่เห็นคือ flag ครับ โดยแต่ละตัวก็มีความหมายต่างๆกันสามารถนำมาใช้มากกว่า 1 ตัว ใน 1 คำสั่งได้ครับ
ได้แก่
i
Ignore Case สำหรับกำหนดให้ pattern ไม่สนใจตัวอักษรพิมพ์เล็กหรือใหญ่ เช่น /[a-zA-Z]/ และ /[a-z]/i มีความหมายเดียวกัน
m
Multi Line โดยปกติแล้ว ฟังก์ชั่นในกลุ่ม preg จะทำงานกับข้อความบรรทัดเีดียว หรือเรียกง่ายๆว่า ไม่มี อยู่ในข้อความ ถ้าเราใส่ flag นี้เข้าไปจะทำให้มันทำงานกับข้อความหลายบรรทัดได้ครับ
คำสั่งนี้จะไม่ทำงาน หากไม่มี " " ภายในข้อความ หรือไม่มี(^)ห($)ของ pattern ไว้เท่านั้นนะครับ เช่น /^pattern$/m
s
Dot All โดยปกติแล้วเครื่องหมาย . ใน pattern จะหมายถึงตัวอักษรใดๆใน pattern แต่ไม่รวม ถ้าเราใส่ flag นี้ให้กับ pattern จะทำให้ . ใน patter รวมเอา เข้าไว้ใน pattern ด้วย
e
Evaluate replacement สำหรับกำหนดให้ pattern สามารถคำนวณ หรือ ปฏิบัติคำสั่งของ PHP ได้ ตามรูปแบบที่กำหนดไว้ใน pattern
u
UTF-8 ใช้ flag นี้เมื่อต้องการให้ pattern ที่ใช้สนับสนุน UTF-8
U
Ungreedy pattern สำหรับกำหนดให้เครื่องหมาย ? ใน pattern สามารถทำงานกับตัวอักษรซ้ำๆกันได้มากกว่า 1 ตัวอักษร เช่น
preg_match('/a(_*?).*e/','a___bcde', $match);
แบบนี้ไม่ match ต้องใส่ U
preg_match('/a(_*?).*e/U','a___bcde', $match);