โฮมเพจ » การเข้ารหัส » คู่มือเริ่มต้นของการแสดงผลปกติ (Regex)

    คู่มือเริ่มต้นของการแสดงผลปกติ (Regex)

    นิพจน์ทั่วไปคือชุดของอักขระที่สร้างรูปแบบที่สามารถค้นหาได้ในสตริง Regex สามารถใช้สำหรับ การตรวจสอบ เช่นเพื่อตรวจสอบหมายเลขบัตรเครดิตสำหรับ ค้นหา เช่นผ่านการจับคู่ข้อความที่ซับซ้อนและสำหรับ แทนที่ข้อความที่ตรงกัน กับสายอื่น นอกจากนี้ยังมีการสนับสนุนหลายภาษาที่ยอดเยี่ยม - เรียนรู้ครั้งเดียวและคุณสามารถใช้งานได้กับหลาย ๆ ภาษาโปรแกรม.

    ฉันเห็นบางคนใช้ regex ครั้งแรกและไม่สนใจมันอย่างสมบูรณ์ ฉันไม่โทษพวกเขา ไวยากรณ์ของ regex มีความซับซ้อนและจะทำให้หลายคนประจบประแจงเช่นเดียวกับภาษาบรรทัดคำสั่งเหล่านั้นเท่านั้นที่เลวร้ายยิ่ง แต่สิ่งใหม่ทุกอย่างน่ากลัวและดูเหมือนเป็นไปไม่ได้ที่จะเรียนรู้ในตอนแรก ดังนั้นการยืมคำพูดของ Horatius ฉันจะพูดอย่างนี้ เริ่มต้นเป็นตัวหนาและกล้าที่จะฉลาด.

    เกี่ยวกับ Regex

    Regex มีรากฐานทางประสาทวิทยาศาสตร์และคณิตศาสตร์และมีการนำไปใช้ในการเขียนโปรแกรมในปี 1968 โดย Ken Thompson ในโปรแกรมแก้ไขข้อความ QED สำหรับการค้นหาข้อความ ตอนนี้เป็นส่วนหนึ่งของภาษาโปรแกรมหลายภาษาเช่น Perl, Java, Python, Ruby และ JavaScript.

    ลองดูตัวอย่างบางส่วนเกี่ยวกับวิธีการทำงานของ regex.

    ฉันจะใช้จาวาสคริปต์ในตัวอย่างของฉัน ตอนนี้เพื่อที่จะผ่านระดับเริ่มต้นคุณต้องเรียนรู้ทั้งหมด ตัวละครคลาสปริมาณตัวดัดแปลงและวิธีการ ใช้ใน regex นี่คือลิงค์ไปยังหน้าแสดงผลปกติของ Mozilla Developer Network ซึ่งคุณสามารถดูตารางที่มีทั้งหมด คุณสามารถอ้างถึง cheatsheet ที่ส่วนท้ายของโพสต์นี้ด้วยตัวอักษรที่ใช้มากที่สุด.

    เรามาดูตัวอย่างง่ายๆพร้อมคำอธิบาย นี่คือ regex.

    นี่คือสิ่งที่ regex ด้านบนจะค้นหาในบรรทัดอักขระ 'B' ตามด้วยอักขระอย่างน้อยหนึ่งตัวระหว่าง (และรวมถึง) 'a' ถึง 'z', 'A' ถึง 'Z' และตัวเลข 0 ถึง 9.

    นี่คือตัวอย่างของการจับคู่ในบรรทัดที่ไฮไลต์:

    ตะกร้า, กระเปาะ, B12 วิตามิน, BaSO4, ยังไม่มีข้อความ ก่อนคริสต์ศักราช บริษัท

    regex ด้านบนจะหยุดการค้นหาที่ ตะกร้า และกลับมาตอบสนองเชิงบวก นั่นเป็นเพราะ ตัวแก้ไขทั่วโลก 'ก.'จะต้องมีการระบุ หากคุณต้องการให้ regex ค้นหาการแข่งขันที่เป็นไปได้ทั้งหมด.

    ตอนนี้เรามาดูวิธีการใช้นิพจน์นี้ใน JavaScript ทดสอบ วิธีการไป: หากพบว่าการแข่งขันกลับมา จริง, อื่น เท็จ.

     var input = "สตริงทดสอบของคุณ", regex = / B [a-zA-Z \ d] + /; การแจ้งเตือนหาก (! regex.test (อินพุต)) ('ไม่พบข้อมูลที่ตรงกัน'); การแจ้งเตือนอื่น ('พบคู่ที่ตรงกัน');

    ลองวิธีอื่น: การจับคู่ ส่งกลับการแข่งขันที่พบในอาร์เรย์.

     var input = "สตริงทดสอบของคุณ", regex = / B [a-zA-Z \ d] + / g, / * ฉันได้เพิ่มตัวแก้ไขทั่วโลก 'g' ลงใน regex เพื่อให้ได้การแข่งขันทั้งหมด * / ary = input.match (regex); หากการแจ้งเตือน (ary === ว่าง) ('ไม่พบข้อมูลที่ตรงกัน'); การแจ้งเตือนอื่น ('การจับคู่คือ:' + ary.toString ());

    วิธีการเกี่ยวกับสตริง แทนที่? ลองทำด้วย regex ตอนนี้.

     var input = "สตริงทดสอบของคุณ", regex = / B [a-zA-Z \ d] + / g; การแจ้งเตือน (input.replace (regex, "#"));

    ด้านล่างเป็น codepen เพื่อให้คุณปรับแต่ง คลิกแท็บ "JavaScript" เพื่อดูรหัส JS.

    การออกกำลังกาย

    สำหรับแบบฝึกหัดคุณสามารถ google “แบบฝึกหัด regex” และลองแก้พวกเขา นี่คือสิ่งที่คาดหวังเมื่อพยายามทำแบบฝึกหัดเหล่านี้ตามระดับความยาก.

    ขั้นพื้นฐาน

    สำหรับฉันความสามารถในการ ตรวจสอบรหัสผ่าน ก็เพียงพอสำหรับการเริ่ม ดังนั้นตรวจสอบรหัสผ่านสำหรับความยาว 8 ถึง 16 ตัวอักษรและตัวเลขพร้อมตัวเลือกอักขระพิเศษที่คุณอนุญาต.

    สื่อกลาง

    ที่นี่คุณควรฝึกฝนด้วยข้อมูลจริงมากขึ้นและเรียนรู้จุด regex เพิ่มเติมอีกสองสาม lookahead, lookbehind ยืนยัน และ กลุ่มที่ตรงกัน;

    • ตรวจสอบรหัส PIN เลขฐานสิบหกวันที่ ID อีเมลจุดลอยตัว.
    • แทนที่ศูนย์, ช่องว่าง, ชุดคำที่ตรงกัน
    • แยกส่วนต่าง ๆ ของ URL

    สูง

    คุณสามารถเพิ่มประสิทธิภาพโซลูชันของแบบฝึกหัดข้างต้น - regex ที่เหมาะสมที่สุดสำหรับอีเมลมีอักขระหลายพันตัวในนั้น ใช้เท่าที่คุณรู้สึกสะดวกสบายและเพียงพอ. คุณสามารถลอง:

    • การแยกวิเคราะห์ HTML หรือ XML (แม้ในโลกแห่งความเป็นจริงมันไม่แนะนำให้ทำเช่นนั้นเพราะการใช้นิพจน์ทั่วไปในการแยกวิเคราะห์ภาษาที่ไม่ปกติเช่น HTML จะไม่ทำให้เข้าใจผิดได้นอกจากนี้การแยกวิเคราะห์ XML เป็นงานยากเหมาะสำหรับผู้ใช้ระดับสูง)
    • แทนที่แท็ก
    • การลบความคิดเห็น (ยกเว้นความคิดเห็นตามเงื่อนไข IE)

    เครื่องมือ

    เครื่องมือในการ เห็นภาพ regex เป็นหนึ่งในสิ่งที่เจ๋งที่สุดสำหรับฉัน หากคุณเคยเจอ regex ที่ซับซ้อนมานานให้คัดลอกแปะไว้ในหนึ่งในเครื่องมือเหล่านั้นและคุณจะสามารถดูโฟลว์ได้อย่างชัดเจน นอกจากนั้นยังมีเครื่องมือมากมายที่คุณสามารถใช้ทำซอกับรหัส regex พวกเขายังแสดงตัวอย่างและแผ่นชีทพร้อมกับคุณสมบัติการแบ่งปัน.

    • Debuggex - มันดึงไดอะแกรม regex ตามอินพุตของคุณและคุณสามารถแชร์อย่างรวดเร็วไปยัง StackOverflow ได้จากตรงนั้น.
    • RegExr - คุณสามารถทดสอบ regex ของคุณกับอันนี้ นอกจากนี้ยังมีเอกสารอ้างอิงเอกสารและตัวอย่างเพื่อช่วยเหลือคุณ.
    • Refiddle - ในตอนนี้นอกเหนือจาก JavaScript แล้วคุณยังสามารถทำซอกับ regex เวอร์ชัน Ruby และ. NET.

    สูตร Regex

    เหรียญ คำนิยาม
    [abc] อักขระเดี่ยวใด ๆ a, b หรือ c
    [^ abc] อักขระใด ๆ ที่นอกเหนือจาก a, b หรือ c
    [a-z] อักขระระหว่าง (รวมถึง) a ถึง z
    [^ a-z] ตัวละครยกเว้นจาก a ถึง z
    [A-Z] อักขระระหว่าง (รวมถึง) A ถึง Z
    . อักขระเดี่ยวใด ๆ
    \ s อักขระช่องว่างใด ๆ
    \ S อักขระที่ไม่ใช่ช่องว่าง
    \ d ตัวเลขใด ๆ 0 ถึง 9
    \ D ไม่ใช่ตัวเลขใด ๆ
    w \ อักขระคำใด ๆ (ตัวอักษรหมายเลข & ขีดล่าง)
    \ W อักขระที่ไม่ใช่คำใด ๆ
    (…) จับทุกอย่างที่ล้อมรอบ
    (a | b) ตรงกับ a หรือ b
    ? อักขระ a ขาดหรือแสดงครั้งเดียว
    A * อักขระ a ขาดหายไปหรือมีอยู่ในปัจจุบันมากกว่านี้
    + อักขระ a แสดงหนึ่งครั้งขึ้นไป
    ก 3 3 ตัวละครที่ปรากฏขึ้นอย่างต่อเนื่อง
    ก 3 3 หรือมากกว่านั้นเกิดขึ้นของตัวละครอย่างต่อเนื่อง
    ก 3,6 ลักษณะของตัวละคร 3 ถึง 6 ตัวติดต่อกัน
    ^ เริ่มต้นของสตริง
    $ จุดสิ้นสุดของสตริง
    \ ข ขอบเขตของคำ ถ้าตัวละครเป็นคำสุดท้ายหรือตัวอักษรแรกของคำหรือถ้าตัวละครอยู่ระหว่างคำหรือตัวอักษรที่ไม่ใช่คำ
    \ B ขอบเขตที่ไม่ใช่คำ

    ตอนนี้อ่าน: นิพจน์ทั่วไป: 30 เครื่องมือและทรัพยากรที่มีประโยชน์