พยายามจะจำหลายที แต่ก็จำไม่ได้สักที ใช้งานทีไร เป็นต้องถามเฮียกูเกิ้ล ทุกที
ปกติจะใช้บ่อยๆ ในการเขียน 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
ภาษาอังกฤษ มีทั้งอธิบาย อ้างอิง วิธีใช้ หมดเลย