• August 22, 2018

    +https://en.wikipedia.org/wiki/Regular_expression
    +https://regexr.com/

    regex คือ การกำหนดรูปแบบหรือกลุ่มคำ เพื่อเอาไว้ใช้ค้นหาข้อความต่างๆตามที่เราต้องการ

    • ค้นหาอักขระธรรมดา
    • ค้นหาความข้อที่กำหนดไว้
    • ค้นหาอักขระพิเศษ

    รูปแบบหรือกลุ่มคำที่กำหนดไว้โดย regex อาจจะ match ได้แค่ 1 อัน หรือ ได้หลายๆอัน หรืออาจจะไม่ match เลยก็ได้ ขึ้นกับเงื่อนไขที่เราต้องการ กำหนดลงไป

    Regular Expressions มีอยู่เกือบทุกภาษา Programming แต่อาจแตกต่างกันนิดหน่อย

    regex สามารถใช้เพื่อค้นหา, แก้ไข และจัดการข้อความ
    Ex. Ctrl + F  ใช้หลักการ Regular Expressions

    Regular Expressions ใช้เมื่อใด

    • เมื่อมีข้อมูลเยอะๆ แต่ต้องการหาข้อมูลที่เฉพาะเจาะจง
    • ค้นหาคำที่ซับซ้อน เช่น ขึ้นต้น A ลงท้ายด้วย x
    • คำที่ขึ้นต้นด้วยอะไรก็ได้ แต่ตรงกลางข้อความต้องมีเครื่องหมาย และลงท้ายตามที่กำหนด เช่น email
    • ตรวจสอบรูปแบบของข้อความ เช่น รหัส เลขบัตรประชาชน

    เครื่องมือสำหรับการหัดเขียน regex คือ Sublime Text เพราะสะดวกมาก และแสดงผลการค้นหาได้ทันที
    ใช้งานช่องค้นหา หรือ กด Ctrl + F

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

    Common matching symbols

    . (dot)
    ค้นหาแทนตัวอะไรก็ได้ เช่น 1.1 จะได้ผลลัพธ์เป็น 111, 191
    เพราะเป็นชุดจำนวนเลขที่ขึ้นต้นด้วย เลข 1 และลงท้ายด้วยเลข 1

    ^regex
    ค้นหาคำขึ้นต้นของข้อความ เช่น ^2.. ได้ผลลัพธ์เฉพาะ 2.5, 205 เพราะขึ้นต้นด้วยเลข 2 และตามหลังด้วยอะไรก็ได้ 2 ตัว

    regex$
    ค้นหาคำลงท้ายของข้อความ เช่น 1$ ได้ผลลัพธ์เฉพาะ 111, 191 เพราะลงท้ายด้วยเลข 1

    [regex]
    ค้นหาอะไรก็ได้ที่อยู่ข้างใน [] เช่น [29] จะได้ผลลัพธ์เฉพาะเลข 2 และ 9

    [regex][regex]
    ค้นหาอะไรก็ได้ที่อยู่ข้างใน [] แล้วตามด้วยอะไรก็ได้ที่อยู่ข้างใน [] อีกที เช่น [12][0] ได้ผลลัพธ์เฉพาะเลข 10 และ 20 เพราะเป็นการค้นหาเฉพาะเลข 1 หรือ 2 แล้วตามด้วย 0

    [^regex]
    ค้นหาอะไรก็ได้ที่ไม่ใช่ข้างใน [^regex] เช่น [^1205] จะได้ผลลัพธ์เฉพาะเลข 9 และ .(dot) เพราะว่าไม่ใช่สิ่งที่อยู่ข้างใน [^1205]

    |
    ใช้แทน หรือ เช่น 105|205 จะได้เฉพาะ 105, 205

    Meta characters

    \d
    ค้นหาเฉพาะที่เป็นตัวเลข จะได้ เฉพาะที่เป็นตัวเลข เช่น  ตัวเลขมาเป็น 1, 0, 5, 3 แยกกัน  จะไม่ได้มาเป็นชุด 1053 เพราะว่า \d เป็นการค้นหาเฉพาะ 0–9 เท่านั้น

     \d+
    + หมายถึงมี 1 หรือมากกว่า 1 หมายความว่า ตัวเลข 0–9 มี 1 หรือมากกว่า 1 ตัวก็ได้ ก็จะสามารถค้นหาตัวเลขที่เป็นชุดเช่น 1053, 205, 111

    \D
    ค้นหาอะไรก็ได้ที่ไม่ใช่ตัวเลข 0–9 จะได้ .(dot), whitespace(ช่องว่าง) และตัวอักษรภาษาอังกฤษ

    \D+
    ภาษาอังกฤษที่เป็นคำๆ เช่น Ant, Cat

    \s
    ค้นหาเฉพาะ whitespace(ช่องว่าง)

    \S
    ค้นหาอะไรก็ได้ที่ไม่ใช่ whitespace(ช่องว่าง) ก็จะได้ทุกตัวในข้อมูล(แต่ไม่เป็นชุด)
    ถ้าอยากได้แบบเป็นชุด ก็เติม +

    \w
    ค้นหาตัวอักษรและตัวเลข ความหมายเดียวกับ [a-zA-Z_0-9]

    \W
    ค้นหาอะไรที่ไม่ใช่ตัวอักษรและตัวเลข ความหมายเดียวกับ [^a-zA-Z_0-9]

    Quantifier

    *
    มีหรือไม่มีก็ได้

    +
    มี 1 หรือมากกว่า 1 ตัว

    ?
    ไม่มีเลย หรือมีแค่ 1 ตัวเท่านั้น เช่น 10? จะได้ เลข 1 เพราะเป็นการค้นหาเลข 1 ที่จะมีหรือไม่มีเลข 0 ด้วยก็ได้

    {x}
    x แทนจำนวนของสิ่งที่ต้องการค้นหา เช่น \d{3} เป็นการค้นหาตัวเลขที่มีจำนวน 3 ตัว เช่น 342 ,423, 444

    {x,y}
    x แทนจำนวนอย่างน้อยที่ต้องการค้นหา
    y แทนจำนวนสูงสุดที่ต้องการค้นหา
    เช่น \d{2, 3} เป็นการค้นหาตัวเลขที่มีจำนวนอย่างน้อย 2 ตัว แต่ไม่เกิน 3 ตัว เช่น 105, 205, 144, 555

    ตัวอย่างอื่นๆ
    [^0–9]  อะไรก็ได้ที่ไม่ใช่เลข 0–9
    ภาษาไทยใช้ [ก-๙]

    นำมาใช้ประโยชน์ เช่น
    การเขียน htacess mod rewrite
    การเขียน script จับไวรัส มัลแวร์ โดยกำหนด รูปแบบ ของ code ไวรัสนั่นเอง

    ภาษา PHP ใช้ฟังก์ชัน preg_match() ในการแมทช์ pattern
    • อ่านเพิ่ม
      +https://medium.com/@_trw/regular-expressions-คืออะไร-2fab4a91ea34
      +https://devahoy.com/posts/regular-expressions-101/
      +http://blog.stephack.com/2012/05/regular-expression-cheats.html
      +http://www.vogella.com/tutorials/JavaRegularExpressions/article.html#common-matching-symbols
      +https://www.tamemo.com/post/111/how-to-regular-expression/
      +http://www.erp.mju.ac.th/acticleDetail.aspx?qid=37&

    Mod Rewrite

    • +http://www.thaiseoboard.com/index.php?topic=3675.0
      +http://www.thaiseoboard.com/index.php/topic,207324.0.html
    • +https://www.regexpal.com/
      +https://www.regextester.com/53716
    • +https://txt2re.com/
    • +https://www.regexmagic.com/
      +https://txt2re.com/


    /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/

    /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/
    ข้อความ (String) ต้องขึ้นต้นด้วย

    /^((\(?\d{3,4}\)?)|(\d{3,4})?)\d{7,8}$/
    ระหว่าง 1.อักขระ ในวงเล็บ หรือ 2.อักขระ ในวงเล็บ มีหรือไม่มีก็ได้
    ไวยกรณ์ผิด Syntax Error จากตัวอักขระ  ควรจะเป็น \- หรือ ต้องไม่มี

    /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/
    1. วงเล็บเปิด 1 อักขระ มีหรือไม่มีก็ได้

    /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/
    และตามด้วยตัวเลขใดๆ 3-4 อักขระ

    /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/
    ตามด้วยวงเล็บปิด 1 อักขระ มีหรือไม่มีก็ได้

    หรือ

    2. ตัวเลขใดๆ 3-4 อักขระ มีหรือไม่มีก็ได้ /^((\(?\d{3,4}\)?)|(\d{3,4})?)\d{7,8}$/
    ไวยกรณ์ผิด Syntax Error จากตัวอักขระ  ควรจะเป็น \- หรือ ต้องไม่มี

    และ ตัวเลขใดๆ 7-8 อักขระ ท้ายสุดของข้อความ /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/

    /^(\+)?(86)?0?1\d{10}$/

    ขึ้นต้นข้อความ /^(\+)?(86)?0?1\d{10}$/
    ด้วย เครื่องหมาย + 1 ตัว มีหรือไม่มีก็ไ้ด้ ^(\+)?(86)?0?1\d{10}$
    ตามด้วย เลข 86 มีหรือไม่มีก็ไ้ด้ /^(\+)?(86)?0?1\d{10}$/
    ตามด้วย เลข 0 มีหรือไม่มีก็ได้ /^(\+)?(86)?0?1\d{10}$/
    ตามด้วย เลข 1 (ต้องมี 1 ตัว) /^(\+)?(86)?0?1\d{10}$/
    และ ตัวเลขใดๆ 10 ตัว ท้ายสุดของข้อความ /^(\+)?(86)?0?1\d{10}$/

    Waiting for Recheck

    ^ เป็นตัวบอกว่าเริ่มต้น เช่น ^5 หมายความต้องขึ้นต้นด้วยเลข 5
    $ เป็นตัวบอกว่าสิ้นสุด เช่น  5$ หมายความว่าต้องลงท้ายด้วยเลข 5
    ? บอกว่า ตัวอักษรที่อยู่ข้างหน้า 1 ตัว จะมีหรือไม่มีก็ได้ เช่น X5? ประโยคที่เข้ากับเงื่อนไข อาจจะเป็น X5 หรือX ก็ได้
    \d จะแทนตัวเลข 0-9 จำนวน 1 ตัว
    \d{3} บอกว่าจะต้องมีตัวเลข 3 ตัว
    \d{1,4} บอกว่าสามารถเป็นตัวเลขตั้งแต่ 1 ถึง 4 ตัว
    + จะแทนความหมายว่า ตั้งแต่หนึ่งตัวขึ้นไป เช่น 5+ หมายถึงประโยคนี้ต้องมีเลข 5 อย่างน้อย 1 ตัวคือ 5, 55,555 ก็ถูกหมด
    \+ เมื่อมี \ มาอยู่ข้างหน้า หมายความว่า + จะเป็นเครื่องหมาย+ ธรรมดา ไม่ได้ทำงานอะไร
    () จะเป็นการรวมตัวอักษร เช่น (789) หมายความ จะต้องมีตัวเลข 789 อยู่ด้วย , (789)? หมายความว่า จะมีตัวเลข 789 อยู่ด้วยหรือไม่ก็ได้ แต่ถ้ามี ก็ต้องมีครบทั้ง 3 ตัวจะมีแค่ 78 ก็ไม่ถูก
    | จะแทนความหมายว่า หรือ เช่น (7|8|9) หมายความว่า จะเป็นเลข 7 หรือเลข 8 หรือเลข 9 ก็ได้ เช่น 70, 845, 9756 ก็ถูกต้องทั้งนั้น
    —–
    /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/

    1. แบ่งออกเป็น 2 ส่วนก่อน /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)  และ  \d{7,8}$/
    2. \d{7,8}$ หมายความตัวเลขด้านหลัง จะมีจำนวน 7 ถึง 8 ตัว
    3.  /^((\(?\d{3,4}\)?)|(\d{3,4}-)?) มีข้อมูลอยู่ในวงเล็บ 2 ชุด คือ (\(?\d{3,4}\)?) และ  (\d{3,4}-) เชื่อมกันด้วย | ซึ่งแสดงว่า จะเป็นชุดใดก็ได้
    4. (\(?\d{3,4}\)?) จะประกอบด้วย \(? หมายความว่า จะมี ( หรือไม่ก็ได้, \d{3,4} หมายความว่าจะต้องเป็นตัวเลข 3-4 ตัว  , \)? หมายความว่า จะมี ) หรือไม่ก็ได้
    5. (\d{3,4}-) ประกอบด้วย \d{3,4} หมายความว่า ต้องเป็นตัวเลข 3 ถึง 4 ตัว, – จะต้องมีตเครื่องหมาย – ตามหลังตัวเลข 3 ถึง 4 ตัวข้างหน้าด้วย

    สรุปตัวเลขที่ถูก pattern ได้ดังนี้
    1231234567
    12312345678
    12341234567
    123412345678
    (1231234567
    123)1234567
    (123)1234567
    (123412345678
    1234)12345678
    (1234)12345678
    123-1234567
    123-12345678
    1234-1234567
    1234-12345678

    บางอันจะเห็นว่ามี ( หรือ ) แค่อย่างละอัน ไม่ได้เขียนผิดนะครับ pattern มันบอกแบบนั้น ผมลองแล้วก็ผ่านด้วย



เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories


Uncategorized