พยายามจะจำหลายที แต่ก็จำไม่ได้สักที ใช้งานทีไร เป็นต้องถามเฮียกูเกิ้ล ทุกที
ปกติจะใช้บ่อยๆ ในการเขียน PHP แต่หลังจากทำ URL (หรือ URL Friendly หรือ Clean URLs) ก็ต้องเอามันไปใช้ทำใน apache rewriting อีกด้วย
Regular Expression (เรียกสั้นๆ ว่า regex ) คือ อะไร?
มันเป็นการกำหนดรูปแบบ (pattern) ของข้อความ เพื่อนำมาใช้งาน ส่วนมากแล้วใช้เพื่อการค้นหา และ/หรือ นำไปตรวจสอบความถูกต้องของข้อมูล เช่นเราต้องการ ให้ข้อมูลที่รับมาเป็นตัวเลขอย่างเดียว หรือข้อความอย่างเดียว หรือต้องการข้อมูลที่เป็นอีเมลเท่านั้น เราสามารถกำหนดเจ้า regex แล้วนำไปตรวจสอบได้ครับ
1. Metacharacters ที่เกี่ยวกับตำแหน่ง (Positioning)
| ^ | ใช้แทนรูปแบบที่ขึ้นต้นด้วยคำที่กำหนดในตำแหน่งเริ่มต้นของข้อความ เช่น “^the” จะตรงกับข้อความใดๆ ที่ขึ้นต้นด้วย the |
| $ | ใช้แทนรูปแบบที่ลงท้ายด้วยคำที่กำหนด เช่น “on the table$” จะตรงกับข้อความใดๆ ที่ลงท้ายด้วย on the table |
| . | ใช้แทนตัวอักษรใดๆ 1 ตัวอักษร ยกเว้น newline (\\n) เช่น “com.” จะ ตรงกับ com1 และ coms แต่จะไม่ตรงกับ telecom (เพราะไม่มีตัวอักษรใดต่อท้าย) |
2. Metacharacters ที่เกี่ยวกับจำนวนครั้งที่ปรากฏของตัวอักษร
| ? | แทนตัวอักษรว่าสามารถจะไม่ปรากฏหรือปรากฏ 1 ครั้ง เช่น ab? จะตรงกับ “a” หรือ “ab” (ตัว b จะไม่ปรากฏ หรือปรากฏ 1 ครั้ง) |
| * | แทนตัวอักษรว่าสามารถจะไม่ปรากฏหรือปรากฏได้หลายครั้ง เช่น ab* จะตรงกับ “a”, “ab”, “abb”, “abbb”, “abbbb” และ “abbbb…” |
| + | แทนตัวอักษรว่าสามารถจะต้องปรากฏ 1 ครั้ง หรือปรากฏได้หลายครั้ง เช่น ab+ จะตรงกับ “ab”, “abb”, “abbb”, “abbbb” และ “abbbb…” |
| {n} | เมื่อ n แทนจำนวนตัวเลข ความหมายก็คือ จะต้องปรากฏ n ครั้ง เช่น ab{4} จะตรงกับ “abbbb” เท่านั้น(b จะต้องปรากฏ 4 ครั้ง) |
| {n,} | เมื่อ n แทนจำนวนตัวเลข ความหมายก็คือ จะต้องปรากฏอย่างน้อย n ครั้ง เช่น ab{2, } จะตรงกับ “abb”, “abbb”, “abbbb” และ “abbbb…” |
| {n,m} | เมื่อ n และ m แทนจำนวนตัวเลข ความหมายคือ จะต้องปรากฏอย่างน้อย n ครั้งแต่ไม่เกิน m ครั้ง เช่น ab{2,5} จะตรงกับ “abb”, “abbbb” และ “abbbbb” เท่านั้น |
3. Metacharacters ที่กำหนดกลุ่มและช่วงของตัวอักษร
| [ ] | แทนตัวอักษรหนึ่งตัว ซึ่งจะปรากฏเป็นตัวอักษรตัวใดตัวหนึ่งใน [ ] เช่น [xy] จะตรงกับ “x”, “y”, “5x”, “abcdx” ถ้าไม่ปรากฏ x หรือ y อยู่เลยก็จะถือว่าไม่ตรง เช่น “qwert” |
| - | ใช้ร่วมกับ [ ] แทนช่วงของตัวอักษรหรือตัวเลข เช่น [a-e] จะตรงกับ “1234a”, “hello” แต่จะไม่ตรงกับ “HELLO” |
4. Metacharacters อื่นๆ
| ( ) | ใช้สำหรับจัดกลุ่มตัวอักษรเข้าด้วยกัน หรือกำหนดกลุ่มของรูปแบบย่อย เช่น a(bc)? จะตรงกับ a หรือ abc (ab จะไม่ปรากฏ หรือปรากฏ 1 ครั้ง) |
| \ | ใช้เป็น escape character และความหมายอื่นๆ เช่น ถ้าต้องการหา “*” ในข้อความจะต้องใช้ “\*”การใช้ baclslash ในอีกความหมายหนึ่งก็คือ ใช้แทน non-printing character เช่น \\a แทน alarm, BEL character (hex 07), \\n แทน newline (hex 0A) \\r แทน carriage return (hex 0D) และ \\t แทน tab (hex 09) เป็นต้น |
| | | ใช้เป็นทางเลือกว่าจะเลือกค่าที่อยู่ทางซ้ายหรือขวาของ | เช่น “gr(a|e)y” จะตรงกับคำว่า “gray” หรือ “grey” |
5. Metacharacters พิเศษที่แทนกลุ่มของตัวอักษรต่างๆ ซึ่งจะต้องใช้ใน bracket [ ] เสมอ
| [:alpha:] | จะตรงกับข้อความที่มีตัวอักษรใดๆ ตั้งแต่ a ถึง z หรือ A ถึง Z หรือเขียนได้เป็น [0-9a-zA-Z] ตรงกับ “ABC”, “abc”, “aBc” แต่จะไม่ตรงกับ “123″ |
| [:alnum:] | จะตรงกับข้อความที่มีตัวอักษรและตัวเลข (alphanumeric character) หรือเขียนได้เป็น [0-9a-zA-Z] ซึ่งเท่ากับ [[:alnum:]] เช่น “ab12″, “12d” แต่จะไม่ตรงกับ “&*” และ “:;” เป็นต้น |
| [:digit:] | จะตรงกับข้อความที่มีตัวเลขอย่างน้อยหนึ่งตัว เช่น “1″, “1a2b3c” แต่จะไม่ตรงกับ “abc” เป็นต้น |
| [:lower:] | จะตรงกับข้อความที่มีตัวอักษรตัวเล็กอย่างน้อยหนึ่งตัว (lowercase characters) เช่น “xyzabc” แต่จะไม่ตรงกับ “ABC”, “B123″ และ “123″ เป็นต้น |
| [:upper:] | จะตรงกับข้อความที่มีตัวอักษรตัวใหญ่อย่างน้อยหนึ่งตัว (lowercase characters) เช่น “XZabc”, “A23″ แต่จะไม่ตรงกับ “abc”, “a123″ และ “123″ เป็นต้น |
| [:space:] | จะตรงกับข้อความที่มี space อย่างน้อย 1 ตัว เช่น ” “, “a bc”, “12 3″ แต่จะไม่ตรงกับ “ab”, “abZX” และ “456″ เป็นต้น |
| [:print:] | จะตรงกับข้อความที่มีตัวอักษรใดๆ ที่สามารถแสดงออกมาได้ (printable character) เช่น “abcX”, “124″ และ ” ” แต่จะไม่ตรงกับ “\\n” (newline) |
| [:graph:] | จะตรงกับข้อความที่มี graphical character ยกเว้น space (” “) เช่น “abc”, “ab&” และ “1aA” แต่จะไม่ตรงกับ ” “ |
| [:xdigit:] | จะตรงกับข้อความที่มีเลขฐานสิบหก ได้แก่ a ถึง f , 0 ถึง 9 และ A ถึง F เช่น “1B”, “0A” แต่จะไม่ตรงกับ “XZ” เป็นต้น |
| [:punct:] | จะตรงกับข้อความที่มี punctuation อย่างน้อยหนึ่งตัว เช่น “a;”, “a23b?” แต่จะไม่ตรงกับ “abc”, “123″ และ “AB3″ เป็นต้น |
ตารางจาก http://www.phpconcept.com/node/8
ส่วน วิธีการใช้ และรายละเอียดอื่นๆ ลองไปดูจากเว็บอ่ืนๆ ที่เขาสอนกันนะครับ
แนะนำ
Regular Expressions Regular Expression (ตอน 1)
http://www.phpconcept.com/node/8
ภาษาไทย อธิบายง่ายดี ใช้ได้เลย
Regular Expressions Regular Expression (ตอนจบ)
http://www.phpconcept.com/node/11
ภาษาไทย อธิบายง่ายดี ใช้ได้เลย
การใช้ Regular Expression ใน PHP โดย อ. ทองจุล ขันขาว
http://www.thaijobmarket.com/regularex.html
ภาษาไทย อธิบายเชิงวิชาการนิดๆ แต่ก็ยังอ่านง่ายอยู่ดี
Regular-Expressions.info : The Premier website about Regular Expressions
http://www.regular-expressions.info/
ภาษาอังกฤษ ข้อมูลละเอียดมากๆๆๆ สอนใช้ regex ในหลายภาษา และหลายฐานข้อมูล
Regular Expressions Wiki
http://en.wikipedia.org/wiki/Regular_expression
ภาษาอังกฤษ มีทั้งอธิบาย อ้างอิง วิธีใช้ หมดเลย
4 Responses
น้องหนู
15|Nov|2007 1ขอบคุณมากค่ะ กำลังทำโปรเจ็คอันนี้แนวนี้อยู่พอดีเลยค่ะ
project.dmtx
28|Nov|2007 24. Metacharacters
/ – ตัวเดียวมั๊งครับ
- – ถ้า // น่าจะหมายถึงให้ print “/”
few
28|Nov|2007 3อ่อ ขอบคุณมากครับ
Regular Expression — In Thai - mrKrich™
19|Nov|2009 4[...] I saw a web that writing about this topic (in Thai) and I thought it’s too many useful for any people [...]
Leave a reply
Search
Pages
Category
Recent Posts
Meta