GORAGOD.com

freelance, web developer, web designer, hosting, domain name

Regular Expressions (ตอนที่ 1)

PHP Regular Expressions หรือเรียกสั้นๆ RegEx เป็นกลุ่มฟังก์ชั่นที่มีประโยชน์มาก ในการค้นหา หรือ แทนที่ข้อความโดยมีรูปแบบ นอกเหนือไปจาก การค้นหาข้อความธรรมดา โดยมีฟังก์ชั่นในกลุ่มนี้ ได้แก่

ereg() สำหรับค้นหาคำหรือตัวอักษรในข้อความที่ต้องการ
eregi() ค้นหาคำเช่นกัน แต่สนใจตัวอักษรภาษาอังกฤษตัวเล็กและตัวใหญ่ด้วย
ereg_replace() ค้นหาคำแล้วแทนที่ด้วยข้อความที่กำหนด
eregi_replace() ใช้เหมือนกับ ereg_replace แต่สนใจตัวอักษรภาษาอังกฤษตัวเล็กและตัวใหญ่ด้วย เช่นกัน
split() แยกข้อความออกเป็นแอเรย์ โดยคำที่กำหนด
spliti() ใช้เหมือนกับ splitแต่สนใจตัวอักษรภาษาอังกฤษตัวเล็กและตัวใหญ่ด้วย

* หมายเหตุ จะเห็นว่าชื่อฟังก์ชั่นที่มีตัว i ประกอบจะเป็นฟังก์ชั่นที่สนใจตัวอักษรภาษาอังกฤษตัวเล็กและตัวใหญ่ด้วย ( a และ A เป็นคนละตัวกัน )

ความสำคัญของฟังก์ชั่นเหล่านี้ ไม่ได้อยู่ที่ตัวฟังก์ชั่น แต่หากอยู่กับ pattern ที่ใช้ในการค้นหามากกว่า ซึ่ง pattern ก็คือรูปแบบที่ใช้ในการค้นหาข้อความตามที่กำหนดนั่นเอง ซึ่งทำให้ฟังก์ชั่นเหล่านี้แตกต่างจากฟังก์ชั่นค้นหาคำทั่วๆไป เช่น

ereg( 'test' , 'one test' ); คือการหาว่าในประโยค one test มีคำว่า test หรือไม่ ซึ่งก็คือการค้นหาข้อความธรรมดา ซึ่งถ้ามี ฟังก์ชั่นจะคืนค่า true

<?
  echo ereg( 'test' , 'one test' ); //true
  echo ereg( 'test' , 'one two' ); //false
?>

ซึ่งหากจะให้ได้ประโยชน์ของฟังก์ชั่นในกลุ่มนี้ ก็ควรจะเป็นการค้นหาข้อความด้วย pattern

<?
  echo ereg( '^one' , 'onetest' ); //true
  echo ereg( '^one'' , 'testone' ); //false
?>

ในที่นี่ '^one' คือ pattern ที่ผมกล่าวถึง ซึ่งมีความหมายว่า ประโยคที่ขึ้นต้นด้วยคำว่า one ซึ่งจะทำให้ได้เงื่อนไขแรกเท่านั้นที่เป็นจริง

ลองมาดูกันว่ามีอะไรบ้างที่เป็นคำสั่งที่ใช้ได้ใน pattern

a หรือตัวอักษรใดๆ(ตัวเลข) มีความหมายถึงตัวอักษรนั้นๆ จำนวน 1 ตัว เช่น a จะตรงกับประโยค a, aa, ba, 1a
^ นำหน้าข้อความใดๆ หมายถึง ประโยคที่ขึ้นต้นด้วยข้อความนั้นๆ ดังเช่นตัวอย่างข้างต้น นอกจากนี้หากใช้ เครื่องหมาย ^ ใน class จะหมายถึงไม่ใช่ หรือ not ด้วย
$ ต่อจากข้อความใดๆ หมายถึงประโยคที่ลงท้ายด้วยข้อความนั้นๆ เช่น test$ จะตรงกับประโยค onetest
. (จุด) ใช้แทนข้อความใดๆก็ได้ 1 คำ ยกเว้นช่องว่าง ซึ่งจะตรงกับประโยคใดๆก็ได้ แต่จะไม่ตรงกับประโยค '' (ไม่มีข้อความ) หรือ http. จะตรงกับคำว่า https แต่ ไม่ตรงกับคำว่า http (เนื่องจากไม่มีตัวอักษรใดๆต่อท้าย)
* ต่อจากตัวอักษรใดๆ หมายถึงข้อความ ที่มีตัวอักษรนั้นๆ หรือไม่มีก็ได้ เช่น ab* จะตรงกับประโยค ant แต่ไม่ตรงกับ bird เนื่องจาก ต้องมี a ส่วน b จะมีหรือไม่ก็ได้
+ ต่อจากตัวอักษรใดๆ หมายถึงข้อความ ที่มีตัวอักษรนั้นๆ อย่างน้อย 1 ตัว เช่น ab+ จะตรงกับประโยค abba แต่ไม่ตรงกับ ant
? ใช้งานเช่นเดียวกันกับ * หากต่อจากตัวอักษรใดๆ หมายถึงข้อความ ที่มีตัวอักษรนั้นๆหรือไม่มีก็ได้ เช่น ab? จะตรงกับประโยค a, ab
0SHAREFacebookLINE it!
^