นิพจน์ทั่วไปเป็นรูปแบบตัวอักษรที่ประกอบด้วยอักขระธรรมดา (เช่นอักขระ A ถึง Z) และอักขระพิเศษ (เรียกว่า metacharacters ) รูปแบบนี้อธิบายหนึ่งหรือมากกว่านั้นที่จะจับคู่เมื่อค้นหาตัวข้อความ นิพจน์ทั่วไปทำหน้าที่เป็นเทมเพลตเพื่อให้ตรงกับรูปแบบอักขระกับสตริงที่ค้นหา
นี่คือตัวอย่างของการแสดงออกปกติที่คุณอาจพบ:
| jscript | VBScript | จับคู่ |
|---|---|---|
| /^/[/t]*$/ | ^ /[ /t]*$ | จับคู่เส้นเปล่า |
| // d {2}-/d {5}/ | /d {2}-/d {5} | ตรวจสอบว่าหมายเลข ID ประกอบด้วยหมายเลข 2 หลัก, ยัติภังค์และหมายเลข 5 หลัก |
| /<(.*)> .*<///1>/ | <(.*)>.*</// 1> | จับคู่แท็ก HTML |
ตารางต่อไปนี้เป็นรายการที่สมบูรณ์ของ metacharacters และพฤติกรรมของพวกเขาในบริบทของการแสดงออกปกติ:
| อักขระ | อธิบาย |
|---|---|
| - | ทำเครื่องหมายตัวละครถัดไปเป็นตัวละครพิเศษหรือตัวละครดั้งเดิมหรือการอ้างอิงย้อนหลังหรือตัวละคร Escape Octal ตัวอย่างเช่น 'n' ตรงกับตัวละคร n '/n' ตรงกับอักขระใหม่ ลำดับ '//' ตรงกับ /และ /(การจับคู่ ( |
| - | ตรงกับตำแหน่งเริ่มต้นของสตริงอินพุต หากมีการตั้งค่าคุณสมบัติ multiline ของวัตถุ Regexp แล้ว ^ จะตรงกับตำแหน่งหลังจาก '/n' หรือ '/r' |
| - | ตรงกับตำแหน่งสิ้นสุดของสตริงอินพุต หากมีการตั้งค่าคุณสมบัติ multiline ของวัตถุ Regexp แล้ว $ จะตรงกับตำแหน่งก่อน '/n' หรือ '/r' |
| - | ตรงกับ Subexpression Zero ก่อนหน้าหรือหลายครั้ง ตัวอย่างเช่น Zo* สามารถจับคู่ Z และ Zoo * เทียบเท่ากับ {0,} |
| - | ตรงกับการแสดงออกของ subexpression ก่อนหน้าหนึ่งครั้งหรือมากกว่า ตัวอย่างเช่น 'Zo+' สามารถจับคู่ ZO และ Zoo แต่ไม่ใช่ Z + เทียบเท่ากับ {1,} |
| - | ตรงกับศูนย์ย่อยก่อนหน้านี้เป็นศูนย์หรือหนึ่งครั้ง ตัวอย่างเช่น Do (ES) สามารถจับคู่หรือทำในทำ เทียบเท่ากับ {0,1} |
| { n } | n เป็นจำนวนเต็มที่ไม่เป็นลบ จับคู่ n ครั้งที่กำหนด ตัวอย่างเช่น 'o {2}' ไม่สามารถจับคู่ 'o' ใน Bob แต่สามารถจับคู่ระบบปฏิบัติการสองระบบในอาหาร |
| { n ,} | n เป็นจำนวนเต็มที่ไม่เป็นลบ จับคู่อย่างน้อย n ครั้ง ตัวอย่างเช่น 'o {2,}' ไม่สามารถจับคู่ 'o' ใน Bob แต่สามารถจับคู่ระบบปฏิบัติการทั้งหมดใน foooood ได้ 'o {1,}' เทียบเท่ากับ 'o+' 'o {0,}' เทียบเท่ากับ 'o*' |
| { n , m } | ทั้ง M และ N เป็นจำนวนเต็มที่ไม่เป็นลบโดยที่ n <= m จับคู่อย่างน้อย n ครั้งและจับคู่ถึง M ครั้ง Liu, O {1,3} จะตรงกับระบบปฏิบัติการสามระบบแรกใน Fooooood 'o {0,1}' เทียบเท่ากับ 'o?' โปรดทราบว่าไม่สามารถมีช่องว่างระหว่างเครื่องหมายจุลภาคและตัวเลขสองตัว |
| - | รูปแบบการจับคู่นั้นไม่ใช่แบบอคติเมื่อตัวละครตามมาด้วยตัวละครที่ จำกัด อื่น ๆ ทันที (*, +,?, { n }, { n ,}, { n , m }) รูปแบบที่ไม่ใช่ของ Greedy นั้นตรงกับสตริงน้อยที่สุดเท่าที่จะเป็นไปได้ในขณะที่รูปแบบโลภเริ่มต้นตรงกับสตริงให้มากที่สุดเท่าที่จะทำได้ ตัวอย่างเช่นสำหรับสตริง oooo, 'o+?' จะตรงกับ O เดียวและ 'O+' จะตรงกับ 'O' ทั้งหมด |
| - | จับคู่อักขระตัวเดียวยกเว้น /n เพื่อให้ตรงกับอักขระใด ๆ รวมถึง '/n' ให้ใช้รูปแบบเช่น '[./n]' |
| ( ลวดลาย ) | รูปแบบ การจับคู่และรับการจับคู่นี้ การจับคู่ที่ได้รับสามารถรับได้จากคอลเลกชันการจับคู่ที่สร้างขึ้นโดยใช้คอลเลก ชัน Submatches ใน VBScript และใช้แอตทริบิวต์ $ 0 … $ 9 ใน JScript ในการจับคู่อักขระวงเล็บให้ใช้ '/(' หรือ '/)' |
| (?: ลวดลาย ) | รูปแบบ การจับคู่ แต่ไม่ได้รับผลการจับคู่นั่นคือนี่คือการจับคู่ที่ไม่ได้รับและไม่ได้ถูกเก็บไว้สำหรับการใช้งานในอนาคต สิ่งนี้มีประโยชน์เมื่อใช้หรืออักขระ (|) เพื่อรวมส่วนต่าง ๆ ของรูปแบบ ตัวอย่างเช่น 'อุตสาหกรรม (?: y | ies) เป็นการแสดงออกที่ง่ายกว่า' อุตสาหกรรม | อุตสาหกรรม ' |
| (? = รูปแบบ ) | ไปข้างหน้าตรวจสอบล่วงหน้าจับคู่สตริงการค้นหาที่จุดเริ่มต้นของ รูปแบบ การจับคู่สตริงใด ๆ นี่คือการจับคู่ที่ไม่ได้รับนั่นคือการจับคู่ไม่จำเป็นต้องเรียกคืนเพื่อการใช้งานในภายหลัง ตัวอย่างเช่น 'windows (? = 95 | 98 | nt | 2000)' สามารถจับคู่ Windows ใน Windows 2000 แต่ไม่ใช่ Windows ใน Windows 3.1 การตรวจสอบล่วงหน้าไม่ได้ใช้อักขระนั่นคือหลังจากการแข่งขันเกิดขึ้นการค้นหาของการแข่งขันครั้งต่อไปจะเริ่มขึ้นทันทีหลังจากการแข่งขันนัดสุดท้ายแทนที่จะเป็นตัวละครที่มีการตรวจสอบล่วงหน้า |
| (?! ลวดลาย ) | Lookahead เชิงลบตรงกับสตริงการค้นหา ณ จุดใด ๆ ที่สตริงไม่ตรงกับ รูปแบบ นี่คือการจับคู่ที่ไม่ได้รับนั่นคือการจับคู่ไม่จำเป็นต้องเรียกคืนเพื่อการใช้งานในภายหลัง ตัวอย่างเช่น 'windows (?! 95 | 98 | nt | 2000)' สามารถจับคู่ Windows ใน Windows 3.1 แต่ไม่ใช่ Windows ใน Windows 2000 การตรวจสอบล่วงหน้าไม่ได้ใช้อักขระนั่นคือหลังจากการแข่งขันเกิดขึ้นการค้นหาการจับคู่ครั้งต่อไปจะเริ่มขึ้นทันทีหลังจากการแข่งขันนัดสุดท้ายแทนที่จะเป็นตัวละครที่มีการตรวจสอบล่วงหน้า |
| x | | จับคู่ x หรือ y ตัวอย่างเช่น 'Z | อาหาร' สามารถจับคู่ Z หรืออาหารได้ '(z | f) ood' ตรงกับ zood หรืออาหาร |
| [ xyz ] | คอลเลกชันตัวละคร จับคู่อักขระใด ๆ ที่มีอยู่ ตัวอย่างเช่น '[ABC]' สามารถจับคู่ 'A' ได้ |
| [^ xyz ] | คอลเลกชันของอักขระค่าลบ จับคู่อักขระใด ๆ ที่ไม่รวม ตัวอย่างเช่น '[^abc]' สามารถจับคู่ 'p' ในแบบธรรมดา |
| [ AZ ] | ช่วงตัวละคร จับคู่อักขระใด ๆ ในช่วงที่ระบุ ตัวอย่างเช่น '[AZ]' สามารถจับคู่อักขระตัวอักษรตัวพิมพ์เล็กใด ๆ ในช่วง 'A' ถึง 'Z' |
| [^ az ] | ช่วงอักขระค่าลบ จับคู่อักขระโดยพลการใด ๆ ที่ไม่ได้อยู่ในช่วงที่ระบุ ตัวอย่างเช่น '[^az]' สามารถจับคู่อักขระโดยพลการใด ๆ ที่ไม่ได้อยู่ในช่วง 'a' ถึง 'z' |
| /B | จับคู่ขอบเขตคำซึ่งหมายถึงตำแหน่งระหว่างคำและพื้นที่ ตัวอย่างเช่น 'er/b' สามารถจับคู่ 'er' ไม่เคย แต่ไม่ใช่ 'เอ่อ' ในคำกริยา |
| /B | ตรงกับขอบเขตที่ไม่ใช่คำ 'er/b' สามารถจับคู่ 'er' ในคำกริยา แต่ไม่สามารถจับคู่ 'er' ไม่เคย |
| /c x | ตรงกับอักขระควบคุมที่ระบุโดย x ตัวอย่างเช่น /cm ตรงกับการควบคุม -M หรือการส่งคืนรถ ค่าของ x ต้องเป็นหนึ่งใน AZ หรือ AZ มิฉะนั้นปฏิบัติต่อ c เป็นตัวละคร 'C' ดั้งเดิม |
| /d | จับคู่อักขระตัวเลข เทียบเท่ากับ [0-9] |
| /d | จับคู่อักขระที่ไม่ใช่ตัวเลข เทียบเท่ากับ [^0-9] |
| /f | จับคู่หน้าแบ่ง เทียบเท่ากับ /x0c และ /cl |
| /n | จับคู่อักขระใหม่ เทียบเท่ากับ /x0a และ /cj |
| /r | จับคู่อักขระคืนรถ เทียบเท่ากับ /x0d และ /cm |
| /s | จับคู่อักขระ Whitespace ใด ๆ รวมถึงช่องว่างแท็บตัวแบ่งหน้า ฯลฯ เทียบเท่ากับ [/f/n/r/t/v] |
| /s | จับคู่อักขระที่ไม่ใช่ไวท์สเปซ เทียบเท่ากับ [^/f/n/r/t/v] |
| /t | จับคู่อักขระแท็บ เทียบเท่ากับ /x09 และ /ci |
| /v | จับคู่แท็บแนวตั้ง เทียบเท่ากับ /x0b และ /ck |
| /w | จับคู่อักขระคำใด ๆ ที่มีขีดเส้นใต้ เทียบเท่ากับ '[a-za-z0-9_]' |
| /w | จับคู่อักขระที่ไม่ใช่คำใด ๆ เทียบเท่ากับ '[^a-za-z0-9_]' |
| /x n | จับคู่ n โดยที่ n คือค่าหลบหนีแบบหกสิบ ค่าการหลบหนีเลขฐานสิบหกจะต้องมีความยาวของตัวเลขสองตัวที่กำหนด ตัวอย่างเช่น '/x41' ตรงกับ A. '/x041' เทียบเท่ากับ '/x04' & 1 การเข้ารหัส ASCII สามารถใช้ในการแสดงออกปกติ - |
| / num | จับคู่ NUM โดยที่ NUM เป็นจำนวนเต็มบวก อ้างอิงถึงการจับคู่ที่ได้รับ ตัวอย่างเช่น '(.)/1' ตรงกับอักขระที่เหมือนกันสองตัวติดต่อกัน |
| / n | ระบุค่า Escape Octal หรือการอ้างอิงย้อนหลัง หากอย่างน้อย n ได้รับ subexpressions ก่อน / n , n คือการอ้างอิงย้อนหลัง มิฉะนั้นถ้า n เป็นหมายเลขแปด (0-7), n เป็นค่าหลบหนี octal |
| / nm | ระบุค่า Escape Octal หรือการอ้างอิงย้อนหลัง หากอย่างน้อย NM ได้รับการแสดงออกของ subexpressions ก่อนหน้าอย่างน้อย nm ก่อน / nm , NM เป็นการอ้างอิงย้อนหลัง หากมีอย่างน้อย n ดึงมาก่อน / nm , n เป็นการอ้างอิงย้อนหลังตามด้วยตัวอักษร m หากไม่มีเงื่อนไขก่อนหน้านี้หากทั้ง N และ M เป็นหมายเลขแปด (0-7) ดังนั้น / nm จะตรงกับค่า Escape Octal NM |
| / NML | ถ้า n เป็นหมายเลขแปดค่า (0-3) และ M และ L เป็นทั้งหมายเลขแปด (0-7) ค่า Octal Escape NML จะถูกจับคู่ |
| /u n | Match N โดยที่ n เป็นตัวละคร Unicode ที่แสดงโดยสี่เลขฐานสิบหก ตัวอย่างเช่น /U00A9 ตรงกับสัญลักษณ์ลิขสิทธิ์ (?) |
หลังจากสร้างนิพจน์ทั่วไปคุณสามารถประเมินเช่นการแสดงออกทางคณิตศาสตร์นั่นคือคุณสามารถประเมินจากซ้ายไปขวาและลำดับความสำคัญ
ตารางต่อไปนี้แสดงลำดับความสำคัญของตัวดำเนินการนิพจน์ทั่วไปจากลำดับความสำคัญสูงสุดถึงลำดับความสำคัญต่ำสุด:
| ผู้ดำเนินการ | อธิบาย |
|---|---|
| - | สัญลักษณ์หลบหนี |
| - | วงเล็บปีกกาและวงเล็บเหลี่ยม |
| *, +,?, {n}, {n,}, {n, m} | ผู้คัดเลือก |
| ^, $, / anymetacharacter | ตำแหน่งและคำสั่งซื้อ |
| - | หรือใช้งาน |