Regular Expressions = regex
การกำหนดรูปแบบ,กลุ่มคำ เพื่อใช้ค้นหาข้อความ ตามต้องการ ค้นอักขระ,ความข้อ,ตรวจสอบรูปแบบ ฯลฯ
Ctrl + F ใช้หลักการ Regular Expressions
. = อะไรก็ได้ เช่น 1.1 = เลขขึ้นต้นด้วย 1 และลงท้ายด้วย 1
^regex =คำขึ้นต้นของข้อความ เช่น ^2.. จะได้ผลลัพธ์เฉพาะ 2.5, 203 =ขึ้นต้นด้วย= 2 ตามหลังด้วยอะไรก็ได้ 2 ตัว
regex$=คำลงท้ายของข้อความ เช่น 1$ ได้ 1611, 1921
[regex]=อะไรก็ได้ที่อยู่ข้างใน [] เช่น [59]
[regex][regex]=อะไรก็ได้ที่อยู่ข้างใน [] แล้วตามด้วยอะไรก็ได้ที่อยู่ข้างใน [] อีกที เช่น [21][0]
[^regex] =อะไรก็ได้ ที่ไม่ใช่ข้างใน [^regex] เช่น [^1205]
|=หรือ เช่น 505|2455 จะได้เฉพาะ 505, 2455
\d=หาเฉพาะที่เป็นตัวเลข และ เป็นการค้นหาเฉพาะ 0–9 เท่านั้น
\D=อะไรก็ได้ ที่ไม่ใช่ตัวเลข 0–9 จะได้ .(dot), whitespace(ช่องว่าง) และอักษรอังกฤษ
\s=หาเฉพาะ whitespace(ช่องว่าง)
\S=หาอะไรก็ได้ที่ไม่ใช่ whitespace(ช่องว่าง) ก็จะได้ทุกตัวในข้อมูล (แต่ไม่เป็นชุด) ถ้าอยากได้แบบเป็นชุด ก็เติม +
\w=หาตัวอักษรและตัวเลข = [a-zA-Z_0-9]
\W=หาอะไร ที่ไม่ใช่ตัวอักษรและตัวเลข = [^a-zA-Z_0-9]
*=มีหรือไม่มีก็ได้ เช่น at*
+=มี 1 หรือมากกว่า 1 ตัว
? =ไม่มีเลย หรือมีแค่ 1 ตัวเท่านั้น
{x}= x =แทนจำนวนของสิ่งที่ต้องการค้นหา เช่น \d{5}
{x,y} =x =แทนจำนวนอย่างน้อยที่ต้องการค้นหา ,y =จำนวนสูงสุดที่ต้องการค้นหา เช่น \d{2, 3}
Regular Expression หรือเรียกย่อๆว่า Regex หมายถึง รูปแบบของลำดับ หรือกลุ่มของสัญลักษณ์ ที่ใช้แทนลำดับ หรือกลุ่มของอักขระตามที่ต้องการ regexp ถือเป็น จุดเด่น ของ perl ที่ ภาษาอื่นๆ เอาไปใช้ตาม แต่ปรับเปลี่ยน ให้ดีขึ้น ใช้ง่ายขึ้น ฯลฯ แล้วก็รูปแบบอาจจะแตกต่างกันนิดๆหน่อยๆ สัญลักษณ์ของ Regular expression ^ คำ/อักษรที่อยู่หน้าเครื่องหมายนี้ ต้องเป็นคำขึ้นต้นของข้อความที่นำมาตรวจสอบ เช่น /^การ/ เป็นการกำหนดว่า คำที่นำมาตรวจสอบต้องขึ้นต้นด้วยคำว่า การ เช่น “การทำดี” “การบ้าน” เป็นต้น คำพวกนี้จะผ่านการทดสอบ $ คำ/อักษรที่อยู่หน้าเครื่องหมายนี้ ต้องอยู่ตอนท้ายของข้อความที่นำมาตรวจสอบ เช่น /มา$/ จะถือว่าคำต่อไปนี้ถูกตามเงื่อนไข “ตามา” “ขอขมา” หรือแม้แต่คำว่า “หมา” แต่คำว่า “ทำดี” จะไม่ผ่าน เพราะไม่ได้ลงท้ายด้วยคำว่า “มา” ตามเงื่อนไขนั่นเอง + คำ/อักษรที่อยู่หน้าเครื่องหมายนี้ ต้องมีปรากฏในคำที่นำมาตรวจสอบ อย่างน้อย 1 ตัว เช่น /ท+/ จะถือว่าคำต่อไปนี้ผ่านการตรวจสอบ เช่น “ทองจุล” “วันทนา” “ถนนหนทางทุกแห่ง” ? คำ/อักษรที่อยู่หน้าเครื่องหมายนี้ อาจะมีปรากฏในคำที่นำมาตรวจสอบ หรือไม่ก็ได้ ถ้ามีจะมีกี่ตัวก็ได้ เช่น /ก?ข+$/ หมายถึง อาจจะมีด้วยตัว ก และอักษรตัวสุดท้ายต้องมีตัว ข อย่างน้อย 1 ตัว (เครื่องหมาย + แสดงว่ามีอย่างน้อย 1 และ เครื่องหมาย $ แสดงว่าเป็นตัวสุดท้าย) * ตัวอักษรที่อยู่หน้าเครื่องหมายนี้ จะเป็นตัวอักษรนี้ซ้ำกันกี่ตัวก็ได้ และจะมีหรือไม่มีก็ได้ \s ช่องว่าง, เว้นวรรค, Space bar หรือ whitespace . ใช้แทนตัวอักษรอะไรก็ได้ เช่น /ก.[0-9]/ หมายถึง ตัว ก ตามด้วยตัวอักษรอะไรก็ได้ และต่อด้วยเลขอารบิค เลข 0-9 /^.{3}$/ หมายถึง ต้องมีตัวอักษรเพียง 3 ตัวเท่านั้น เป็นตัวเลข ตัวอักษร ภาษาไทย ภาษาอังกฤษ ได้ทั้งนั้น [ ] ใช้ระบุตำแหน่งในคำว่า ในตำแหน่งนี้จะมีตัวอักษรอะไรได้บ้าง เช่น /[นร]/ เป็นการกำหนดว่า คำที่นำมาตรวจสอบ ต้องเป็นตัว น หรือ ตัว ร เท่านั้นจึงจะผ่าน มีความหมายเช่นเดียวกับ “น|ร” /[ก-ค]/ เป็นการบอกว่า คำที่นำมาจะต้องเป็น ตัว ก ข ค เท่านั้น เช่น ในกรณีเลขประจำตัวที่ขึ้นต้นด้วย ก ข หรือ ค เท่านั้น ถ้าพิมพ์ตัวแรกเป็นตัวอักษรตัวอื่นก็แสดงว่าพิมพ์ผิด เราจะเขียนได้ดังนี้ ^[ก-ค] /^[a-zA-Z]/ เป็นการบอกว่า คำที่นำมาตรวจสอบต้องขึ้นต้นด้วยตัวอักษร จะเป็นตัวเล็ก คือ a ถึง z หรือ ตัวใหญ่ คือ A ถึง Z ก็ได้ /[0-9๐-๙]%/ เป็นการบอกว่า ให้มีตัวเลข 1 ตัว เลขอะไรก็ได้ เลข 0 ถึง เลข 9 เป็นได้ทั้งเลขไทยและอารบิค ต่อด้วยเครื่องหมาย % /[ก-๙]/ ตัว ก ถึง ฮ รวมทั้งสระทุกตัว และ ตัวเลขไทย ๐ ถึง ๙ /[0-9๐-๙]/ เลข 0-9 ทั้งเลขไทยและฝรั่ง /^[0-9๐-๙]+$/ ให้มีเฉพาะตัวเลข 0-9 เลขไทยหรือเลขฝรั่งก็ได้ แต่ห้ามมีตัวอักษรใด ๆ /^[กข]{3}[-][0-9]$/ ขึ้นต้นด้วยตัว ก หรือ ข จำนวน 3 ตัว ต่อด้วยเครื่องหมาย – และจบด้วยตัวเลขอารบิค เลข 0-9 เช่น “กขก-5” “กกก-3” เป็นต้น สิ่งต่อไปนี้จะไม่ผ่านหรือเป็นเท็จ เช่น “กกกขข” เพราะ ตัวที่ 4 ไม่ใช้เครื่องหมาย – และตัวสุดท้ายไม่ใช่ตัวเลข “ขขข-๘” ตัวเลขสุดท้ายเป็นเลขไทย ไม่ว่าตัวอักษร หรือสัญลักษณ์ใด ๆ ที่อยู่ภายในเครื่องหมาย [ ] จะกลายเป็นสัญลักษณ์ธรรมดา เช่น + กลายเป็นเครื่องหมายบวก แทนที่จะหมายถึงว่า ต้องมีตัวอักษรอย่างน้อย 1 ตัว { } แสดงจำนวนครั้งที่ซ้ำกัน เช่น /กข{2}/ หมายถึงให้มีตัว ข จำนวน 2 ตัว เช่น “กขข” /กข{2,}/ หมายถึงให้มีตัว ข อย่างน้อย 2 ตัว เช่น “กขขขข” /กข{3,5}/ หมายถึงให้มีตัว ข จำนวน 3-5 ตัวเท่านั้น คือ “กขขข” “กขขขข” และ “กขขขขข” ( ) ใช้รวมกลุ่มเข้าด้วยกันเป็นส่วนเดียวกัน เช่น /ก(ขค)*/ หมายถึง ตัว ก และอาจจะตามด้วยตัว ขค หรือไม่มีตัว ขค ก็ได้ เครื่องหมาย * แสดงว่าจะมีหรือไม่ก็ได้ /ก(ขค){1,5}/ หมายถึง ตัว ก แล้วจะตามด้วย ขค จำนวน 1-5 ชุด เช่น “กขคขคขค” หรือ “กขคขค” ก็ได้ | เสนอทางเลือกอย่างใดอย่างหนึ่ง เช่น /การ|ความ/ เป็นการบอกว่า จะใช้คำว่า การ หรือ ความ ก็ได้ /(ก|ขค)งจ/ เช่น กงจ หรือ ขคงจ ก็ได้ ^[1-9][0-9]*$ ขึ้นต้นด้วยเลข 1-9 และอาจจะต่อด้วย เลข 0-9 กี่ตัวก็ได้ ในกรณีนี้ ถ้าเป็นเลข 0 ก็จะไม่ผ่าน จะผ่านตั้งแต่ 1 2 3 4 ไปเรื่อย ๆ ^(0|[1-9][0-9]*)$ อาจจะขึ้นต้นด้วยเลข 0 หรือเลข 1-9 ก็ได้ และอาจจะต่อด้วยเลข 0-9 ในกรณีนี้ เราใช้ตรวจสอบการพิมพ์ที่เป็นตัวเลขตั้งแต่ 0 ขึ้นไป ถ้ามีตัวอักษร ก็จะไม่ผ่านการตรวจสอบ หรือ เป็นเท็จ นั่นเอง ^(0|-?[1-9][0-9]*)$ เหมือน ^(0|[1-9][0-9]*)$ เพียงแต่ ถ้าไม่ขึ้นต้นด้วยเลข 0 สามารถมีเครื่องหมาย ลบ ได้ หรือจะไม่มีเครื่องหมายลบ ก็ได้ เครื่องหมาย ? แสดงว่า จะมีหรือไม่มี ก็ได้ ^[0-9]+(\.[0-9]+)?$ ขึ้นต้นด้วย 0-9 อย่างน้อย 1 ตัว และอาจจะมี จุดและต่อด้วยตัวเลข 0-9 อย่างน้อย 1 ตัว อย่างนี้ เป็นการบอกว่าจะทศนิยมหรือไม่มีก็ได้ (สังเกตเครื่องหมาย ? อยู่หลังกลุ่มทั้งหมดซึ่งอยู่ในวงเล็บ เป็นการบอกว่า กลุ่มนี้ คือ (\.[0-9]+) จะมีหรือไม่มีก็ได้) แต่จะมีแค่ จุดเฉย ๆ เช่น 15. อย่างนี้ไม่ได้ ต้องเป็น 15.2 หรือ 15.38 ก็ได้ (เพราะเครื่องหมาย + อยู่หลัง [0-9] แสดงว่า ตำแหน่งนี้ คือต่อจาก จุด ยังไง ๆ ก็ต้องมีตัวเลข 0 ถึง 9 อย่างน้อย 1 ตัว จะเป็น 2 ตัว 5 ตัว 10 ตัว ก็ได้) ^[0-9]+(\.[0-9]{2})?$ เหมือนข้างบน แต่บังคับว่า ถ้ามีทศนิยม ทศนิยมต้องมี 2 ตำแหน่งเท่านั้น เครื่องหมาย {} กำหนดว่าจะต้องมีซ้ำกี่ครั้ง ^[0-9]+(\.[0-9]{1,2})?$ เหมือนข้างบน แต่อนุญาตให้มีทศนิยม 1 หรือ 2 ตำแหน่ง สังเกตการเขียนตัวเลข ในระหว่างเครื่องหมาย { และ } ^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$ ต้องขึ้นต้นด้วยตัวเลข 0-9 หรือ อาจจะตามด้วยเครื่องหมาย คอมม่า และตัวเลข 0-9 อีก 3 ตัว และอาจจะต่อด้วยทศนิยม 1 หรือ 2 ตำแหน่ง ^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(\.[0-9]{1,2})?$ เหมือนข้างบน แต่กำหนดให้การมีเครื่องหมาย คอมม่า อาจจะมีหรือไม่มีก็ได้ วิธีกำหนดทางเลือกใช้เครื่องหมาย | แทนที่จะใช้ ? การเลือกใช้ต้องอยู่ที่เราจะตัดสินใจว่าจะเลือกใช้อะไรจึงจะเหมาะสม นี่แหละเสน่ห์ของการเขียนโปรแกรม มีวิธีการหลายอย่างที่จะได้มาซึ่งผลลัพธ์อย่างเดียวกัน แต่อย่างไหนจะเหมาะ ต้องเลือกดู เลือกใช้ให้เหมาะสม อัขระพิเศษที่ใช้ใน regexp [] range specificication (e.g., [a-z] means a letter in the range a to z) \w letter or digit; same as [0-9A-Za-z] \W neither letter or digit \s space character; same as [ \t\n\r\f] \S non-space character \d digit character; same as [0-9] \D non-digit character \b backspace (0x08) (only if in a range specification) \b word boundary (if not in a range specification) \B non-word boundary * zero or more repetitions of the preceding + one or more repetitions of the preceding {m,n} at least m and at most n repetitions of the preceding ? at most one repetition of the preceding; same as {0,1} | either preceding or next expression may match () grouping ตัวอย่างการใช้งาน regexp แบบทั่วๆไป /[abcde]/ # เทียบได้กับ ตัวอักษร a, b, c, d,e /[0123456789]/ # เทียบได้กับ ตัวเลขใดๆหนึ่งตัว /[0-9]/ # เทียบได้กับ ตัวเลขใดๆหนึ่งตัว /[a-zA-Z0-9_]/ # เทียบได้กับ ตัวเลข, ตัวอักษร หรือ ขีดล่าง หนึ่งตัว /[^0-9]/ # เทียบได้กับอะไรก็ได้หนึ่งตัว ที่ไม่ใช่ตัวเลข /[^aeiouAEIOU]/ # เทียบได้กับอะไรก็ได้หนึ่งตัว ที่ไม่ใช่สระในภาษาอังกฤษ /\d/ #มีค่าเท่ากับ /[0-9]/ /\D/ #มีค่าเท่ากับ /[^0-9]/ /\w/ #มีค่าเท่ากับ /[a-zA-Z0-9_]/ /\W/ #มีค่าเท่ากับ /[^a-zA-Z0-9_]/ /\s/ #มีค่าเท่ากับ /[\r\t\n\f]/ /\S/ #มีค่าเท่ากับ /[^\r\t\n\f]/ ตัวอย่างการใช้งาน regexp แบบ Multi-character Patterns หรือ Grouping Patterns ในข้อข้อนี้เราจะมีสัญญาลักษณ์อยู่ 3 ตัว คือ * หมายความว่า ศูนย์หรือมากว่า + หมายความว่า หนึ่งหรือมากว่า ? หมายความว่า ศูนย์หรือหนึ่ง เช่น /x+/ # หมายถึงมี x อย่างน้อยหนึ่งตัว แล้วถ้าสมมุติว่าเราต้องการบอกว่ามี x ตั้งแต่ 5 ถึง 10 ตัว เราสามารถเขียนเป็น /x{5,10}/ เราอาจใช้วิธีเขียนแบบนี้แทนการใช้ *, +, ? ได้เป็น {0,}, {1,},{0,1} และยังมีอีกเครื่องหมายหนึ่งที่ใช้อื่นๆอีก เช่น /song|blue/ # ใช้เครืองหมาย | หมายถึงเป็น คำว่า song หรือคำว่า blue ก็ได้ /^real/ # ใช้เครืองหมาย ^ หมายถึง string ที่ขึ้นต้นด้วยคำว่า real /real$/ # ใช้เครืองหมาย $ หมายถึง string ที่ลงท้ายด้วยคำว่า real ตัวอย่างการใช้งาน regexp แบบ Multi-character Patterns หรือ Grouping Patterns เพิ่มเติม . ก็คือตัวอะไรก็ได้ ไม่ว่าจะเป็น ช่องว่าง หรือว่า a ก็ ใช้ . แทนได้หมด .+ คือ ตัวอะไรก็ได้ กี่ตัวก็ได้ แต่ต้องมีอย่างน้อย 1 ตัว (ไม่มีไม่ได้) ? คือ ตัวอะไรก็ได้ 1 ตัว ซึ่งจะมีหรือไม่มีก็ได้ .a คือ ตัวอะไรก็ได้รวมถึงเครื่องหมายเว้นวรรคต่างๆ 1 ตัว แต่ต้องตามด้วย a เช่น aa ba ca 5a 9a pa หรือแม้กระทั่ง เว้นวรรคa a.a คือ ตัว a แล้วตามด้วยตัวอะไรก็ได้ แล้วตามด้วย a เช่น a0a aaa asa รวมถึง aเว้นวรรคa แต่ว่า aa เฉยๆ ไม่ได้ (ต้องมี 3 ตำแหน่งเท่านั้น) .? คือ ตัวอะไรก็ได้รวมถึงเครื่องหมายเว้นวรรคต่างๆ 1 ตัว แต่จะมีหรือไม่มีก็ได้ a.? คือ ตัว a แล้วตามด้วยตัวอะไรก็ได้ จะมีหรือไม่มีก็ได้ เช่น aเฉยๆ aเว้นวรรค aa as a1 ae แต่ sa ไม่ใช่ (ต้องขึ้นด้วย a เท่านั้น) a.?a คือ ตัว a แล้วตามด้วยตัวอะไรก็ได้ จะมีหรือไม่ก็ได้ แต่ต้องตามด้วย a เช่น asa aaa a0a aoa aเว้นวคครa หรือ aa .+ คือ ตัวอะไรก็ได้รวมถึงเครื่องหมายเว้นวรรคต่างๆ กี่ตัวก็ได้ a+ คือ ตัว a กี่ตัวก็ได้ เช่น aa aaaaaa aaaaaaaaa รวมถึง a เฉยๆ แต่ aaaaaaaaaas ไม่ใช่ (ต้องมีแค่ a เท่านั้น) a.+ คือ a แล้วตามด้วยตัวอะไรก็ได้ กี่ตัวก็ได้ เช่น a0000000000 askjkljhi906klsd a9 a8a a666 aเว้นวรรค0259skfk a.+a คือ a แล้วตามด้วยตัวอะไรก็ได้ กี่ตัวก็ได้ แต่ต้องตามหลังด้วย a เช่น aaa asa aเว้นวรรคa assssssssa a23s554a aเว้นวรรคเว้นวรรคเว้นวรรคa แต่ aa ไม่ใช่ เพราะ ต้อง 3 ตำแหน่งขึ้นไปเท่านั้น ดังนั้น การเขียน regexp เวลาเจอคำที่พลิกแพลง random มา เช่น D UaN G E OaN หรือ D U NaGaE OaN ให้ใส่ไปว่า D.U.N.G.E.O.N ก็จะถึอว่า match ทั้งหมด (เจอหมด)
http://blog.stephack.com/2012/05/regular-expression-cheats.html