01 ตุลาคม 2552

Regular Expressions Metacharacter

Regular Expressions หรือ regex เป็น เครื่องมือที่มีประโยชน์มากในการเปรียบเทียบตัวอักษร คำ หรือ รูปแบบของข้อความต่างๆ ที่เราต้องการจากข้อความอื่นๆ เมื่อค้นหาได้แล้วเราก็อาจจะแทนที่ด้วยข้อความอื่นๆ ได้

การใช้ regex ไม่ได้มีเฉพาะใน PHP นะครับ อย่างใน Javascript, Perl, VBscript แม้กระทั่งใน MySQL ก็มีเช่นกันครับ

ถ้าคุณต้องการจะใช้ regex ละก็คงหนีไม่พ้นที่จะต้องทำความรู้จักกับ Meta characters เพราะนอกจากเราจะใช้ตัวอักษรและตัวเลขต่างๆ ในการสร้างรูปแบบ (pattern) ของตัวอักษรที่เราต้องการจะค้นหาแล้ว เราสามารถใช้ Meta characters มาช่วยสร้างรูปแบบอื่นๆ ที่มีความซับซ้อนมากขึ้นได้

Meta characters

  • \ ใช้เป็น escape character
  • ^ ใช้สำหรับกำหนด ตำแหน่งเริ่มต้นของข้อความ เช่น "^PHP" จะตรงกับข้อความที่จะต้องขึ้นต้นด้วย PHP เท่านั้น
  • $ ใช้สำหรับกำหนด ตำแหน่งสิ้นสุด เช่น "PHP$" จะตรงกับข้อความที่จะต้องลงท้า่ยด้วย PHP เท่านั้น
  • . ใช้สำหรับแทนตัวอักษรใด ๆ 1 ตัวอักษร เช่น "P.P" จะตรงกับ "PHP" แต่จะไม่้ตรงกับ "PHHP" เนื่องจากต้องการตัวอักษรตัวใดก็ได้ที่อยู่ตรงกลาง
  • [ เริ่มต้นการกำหนดระดับอักษรที่เป็นไปได้ในเงื่อนไข
  • ] สิ้นสุดการกำหนดระดับอักษร
  • | เป็นสัญลักษณ์ที่สำหรับเป็นทางเลือก
  • ( ใช้สำหรับเริ่มจัดกลุ่มตัวอักษร
  • ) ใช้สำหรับสิ้นสุดการจัดกลุ่มตัวอักษร
  • ? แทนตัวอักษร แต่จะสามารถปรากฎ หรือไม่ปรากฎก็ได้ 1 ครั้ง
  • * แืทนตัวอักษร แต่จะสามารถปรากฎ หรือไม่ปรากฎ ได้หลาย ๆ ครั้ง เช่น "wh*" จะตรงกับ "w" และ "where"
  • + แทนตัวอักษร ที่จะต้องปรากฎ 1 ครั้ง หรือปรากฎได้หลายครั้ง เช่น "wh+" จะตรงกับ "where" แต่จะตรงกบ "w"
  • { เริ่มตรวจสอบจำนวนตัวอักษร
  • } สิ้นสุดการตรวจสอบตัวอักษร
  • - ใช้สำหรับระบุช่้วงตัวอักษร ต้องใช้ภายใต้ [] เท่านั้น

การใช้งาน [ และ ]

การ ใช้งาน [ และ ] เป็นการตรวจสอบระดับตัวอักษรที่เป็นไปได้ในเงื่อนไข จะสามารถตรวจสอบได้เพียง 1 ตัวอักษร ตัวอย่าง "[abcde]" จะตรงกับ "a" แต่จะไม่ตรงกับ "f" และ "g"

การใช้งาน { และ }

เราสามารถระบุจำนวนของตัวอักษร การใช้งานของ { } สามารถใช้ได้ 3 แบบ คือ
  • {n} n แทนตัวเลขที่ปรากฎได้ หมายถึงต้องมีตัวอักษรปรากฎเท่ากับจำนวนตัวเลขที่ระบุอยู่ เช่น "{3}" จะต้องมี ตัวอักษรหรือตัวเลขปรากฎ 3 ตัวอักษร ซึ่งจะตรงกับ "are" แต่จะไม่ตรงกับ "were"
  • {n,} n แทนตัวเลขที่ปรากฎได้ หมยถึง ต้องมีตัวอักษรปรากฎอยู่ มากกว่าหรือเท่ากับ จำนวนตัวเลขที่ระบุอยู่ เช่น "{3,}" จะต้องมี อักษรปรากฎอยู่อย่างน้อย 3 ตัวอักษร ซึ่งจะตรงกับ "are" และ "were" แต่จะไม่ตรงกับ "do"
  • {n,m} n แทนตัวเลขที่ปรากฎได้ m แทนตัวเลขที่ปรากฎได้สูงสุด หมายถึง ต้องมีตัวอักษรปรากฏอยู่อย่างน้อน n ตัว แต่ต้องไม่เกิน m ตัว เช่น "{3,5}" ซึ่งจะตรงกับ "are" และ "where" แต่จะไม่ตรงกับ "do"

การใช้งาน [] ร่วมกัีบ {}

การนำเอา "[]" มาใช้งานร่วมกับ "{}" ก็จะทำให้ "[]" ที่ตรวจสอบตัวอักษรได้แต่ 1 ตัวอักษร ก็ทำให้สามารถตรวจสอบ ได้หลาย ตัวอักษร เราสามารถใช้ "-" เช่น "[a-z]{3}" จะตรงกับ "who" และ "are" ซึ่งตรงตามเงื่อนไขก็คือ สามารถมี a - z แต่ต้องมีขนาด 3 ตัวอักษร แต่จะไม่ตรงกับ "2bb" เนื่องจากมี ตัวเลขปรากฎอยู่

การใช้ () และ |

เราสามารถใช้ () จัดกลุ่มข้อความที่มีอยู่ และ | ใช้สำหรับเลือกทางเลือก เช่น "a(b|c)" จะตรงกับ "ab" และ "ac" แต่จะไม่ตรงกับ "bc" ลองดูตัวอย่างที่มีการทำงานซับซ้อนมากขึ้นอีกนะครับ "^[a-z]+[a-z]$" ความหมายคือ ต้องขึ้นต้นด้วยตัวอักษร และ ลงท้ายด้วยตัวอักษร อย่างน้อย 1 ตัว "^[a-z\-]" ความหมายคือ ต้องขึ้นต้นด้วยตัวอักษร หรือ "-" ตัวอย่างของ Regex ที่มีใช้บ่อย ๆ "^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)$" ใช้สำหรับตรวจสอบ email "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$" ใช้สำหรับตรวจสอบ IP Address

0 ความคิดเห็น:

แสดงความคิดเห็น

 

sutee-developer Copyright © 2009 Community is Designed by Bie