-
การแสดงออกปกติ:
นิพจน์ทั่วไปอนุญาตให้ผู้ใช้สร้างรูปแบบการจับคู่โดยใช้ชุดอักขระพิเศษ จากนั้นเปรียบเทียบรูปแบบการจับคู่กับออบเจ็กต์เป้าหมาย เช่น ไฟล์ข้อมูล อินพุตโปรแกรม และอินพุตฟอร์มบนเว็บเพจ ขึ้นอยู่กับว่าออบเจ็กต์การเปรียบเทียบมีการจับคู่หรือไม่ รูปแบบ รันโปรแกรมที่เกี่ยวข้อง ความสม่ำเสมอได้รับความรักจากโปรแกรมเมอร์เนื่องจากความเรียบง่าย ใช้งานได้จริง และรวดเร็ว 
ความคิดบางประการเกี่ยวกับการเขียน regex:
1. ขั้นแรก กำหนดกฎเกณฑ์ คุณต้องการจับคู่สายชนิดใด ประกอบด้วยส่วนใดบ้าง และมีลักษณะเฉพาะอย่างไร
2. เสนอหน่วยที่เล็กที่สุด บางครั้งกฎการจับคู่บางข้อก็เกิดขึ้นซ้ำๆ เราสามารถพยายามค้นหาจุดร่วมและวางแผนให้เป็นกฎได้
3. เขียนกฎปกติทีละข้อตามกฎและหน่วยที่เล็กที่สุด
4. รวมการรวมกันของความสม่ำเสมอของหน่วยเหล่านี้เข้าด้วยกันเพื่อสร้างความสม่ำเสมอที่สมบูรณ์ตามที่คุณต้องการ
ที่นี่เราจำเป็นต้องเข้าใจแท็กพื้นฐานและการใช้งาน มาร์กอัปปกตินั้นเรียบง่ายมาก ดังนั้นคุณก็น่าจะเข้าใจได้เช่นกัน
แท็กที่ใช้กันทั่วไปในนิพจน์ทั่วไป
1 เครื่องหมายที่ใช้กันทั่วไปในนิพจน์ทั่วไป 2 ^ |. จุดเริ่มต้นของบรรทัดหรือสตริง 3 $ |. อักขระอื่นที่ไม่ใช่บรรทัดใหม่ 5 w | อักขระที่ไม่ใช่คำ 7 d | ตัวเลข (เทียบเท่ากับ [0-9]) 8 D |. อักขระที่ไม่ใช่ช่องว่าง 9 10 A |. จุดเริ่มต้นของสตริง 11 Z | สิ้นสุดสตริง 13 14 s |. อักขระว่าง 15 S |. อักขระไม่ว่าง 16 17 b |. ขอบเขตของคำ (นอก []) 18 B |. ] | อักขระใดๆ ในชุดที่มียัติภังค์อยู่ตรงกลาง แสดงถึงช่วง เช่น: [0-9], [az]21? | 0 หรือ 1 นิพจน์ก่อนหน้า 22 | หรือ 23 () | 25 * |. นิพจน์ก่อนหน้าเป็นศูนย์หรือมากกว่า 26 *? |. นิพจน์ก่อนหน้าเป็นศูนย์หรือมากกว่า (ไม่โลภ) 27 + |. 1 นิพจน์ก่อนหน้าขึ้นไป 28 +? |. mn นิพจน์ก่อนหน้า 30 {m,n}? |. mn นิพจน์ก่อนหน้า (ไม่โลภ) 31 32 33 นอกจากนี้ {?=} { !} (?>) (?#) (?imx-imx) เป็นต้น
ตัวอย่างพื้นฐานที่สุด:
1 # จับคู่สตริงทั้งหมด 2 ใส่ /ruby/ =~ "ruby" # 0 3 ใส่ /ruby/ =~ "Ruby" # nil 4 5 # จับคู่จุดเริ่มต้นและจุดสิ้นสุดของบรรทัดหรือสตริง 6 str = "abcdef" 7 ใส่ str 8 ใส่ /^abc/ =~ str # 0 9 ใส่ /def$/ =~ str # 310 11 str = "abcndefn" 12 ใส่ /^abc/ =~ str # 013 ใส่ /def$/ =~ str # 414 ใส่ /abc/ =~ str # 015 ใส่ /def/ =~ str # 416 17 #จับคู่จุดเริ่มต้นและจุดสิ้นสุดของสตริง 18 str = "abcndefn" 19 วาง /Aabc/ =~ str # 020 puts /defZ/ =~ str # 421 puts /defz/ =~ str # nil22 23 #Match word character 24 ใส่ "Match word character" 25 pattern = /w/26 put pattern = ~ "abc " # 027 ใส่รูปแบบ =~ "." # nil28 29 # จับคู่จำนวนเต็ม 30 # d หมายเลข 31 # D ไม่ใช่ตัวเลข 32 ใส่ "หมายเลขที่ตรงกัน" 33 ใส่ /d/ =~ "122" #034 puts /D / =~ "122" #nil35 puts /D/ =~ "abc" #036 37 38 #Border 39 str = "นี่คือเพื่อนของคุณ!"40 ใส่ str41 ใส่ str.gsub(/b/ ,"|" ) # |นี่|. |เป็น|.
อินสแตนซ์รอบคัดเลือก
1 ใส่ "รอบคัดเลือก" 2 ใส่ "รอบคัดเลือก: *" 3 ใส่ /(abc)*/ =~ "a" # 0 4 ใส่ /(abc)*/ =~ "abc" # 0 5 6 7 ใส่ "รอบคัดเลือก รอบคัดเลือก: +" 8 ใส่ /(abc)+/ =~ "a" # ไม่มี 9 ใส่ /(abc)+/ =~ "abc" # 010 11 ใส่ "รอบคัดเลือก: ?" 12 ใส่ /(abc)?/ =~ " c" # 013 ใส่ /(abc)?/ =~ "abc" # 014 15 16 ใส่ "ตัวระบุ: {n}"17 ใส่ /(abc){2}/ =~ "abc" # nil18 ใส่ /(abc) {2}/ =~ "abcabc" # 019 20 ใส่ "ตัวระบุ: {n,}"21 ใส่ /(abc){2,}/ =~ "abc" # nil22 ใส่ /(abc){ 2,}/ = ~ "abcabc" # 023 24 ใส่ "ตัวระบุ: {n,m}"25 ใส่ /(abc){2,3}/ =~ "abc" # nil26 ใส่ /(abc){2, 3}/ =~ " abcabcabc" # 027 28 ใส่ "ตัวระบุ: *?" 29 ใส่ /(abc)*?/ =~ "a" # 030 ใส่ /(abc)*?/ =~ "abcabc" # 031 32 ใส่ "ตัวระบุ: +? " 33 ใส่ /(abc)+?/ =~ "a" # nil34 ใส่ /(abc)+?/ =~ "abcabc" # 035 36 ใส่ "รอบคัดเลือก: ??"37 ใส่ /(abc)??/ = ~ "a" # 038 ใส่ /(abc)??/ =~ "abcabc" # 039 40 41 #match, {1} {3}42 # {3} สามารถจับคู่ได้ จากนั้น {1} จะตรงกันอย่างแน่นอน แต่ การย้อนกลับไม่เป็นความจริง 43 # ช่วงการจับคู่: {1} > {3}
ตัวอย่างทั่วไป:
1 ใส่ "ตัวอย่าง" 2 #จับคู่หมายเลขโทรศัพท์: 3 #โดยทั่วไปหมายเลขโทรศัพท์ของจีนคือ 7-8 หลัก รหัสพื้นที่เป็นจำนวนเต็ม 3-4 หลัก หลักแรกของรหัสพื้นที่คือ 0 และตัวคั่น '-' คือ ใช้ตรงกลาง 4 #สนใจข้อจำกัดแรกและสุดท้าย สัญลักษณ์ 5 รูปแบบ = /^0d{2,3}-d{7,8}$/ 6 ใส่รูปแบบ =~ "010-82809999" # 0 7 ใส่รูปแบบ =~ "00010-82809999" # ไม่มี 8 9 #ตรงกับหมายเลขโทรศัพท์มือถือ 10 # เริ่มต้นด้วย 1 หลักที่สองคือ 3, 5, 8, 11 หลัก 11 รูปแบบ = /^1[3,5,8] d{9}$/12 ใส่รูปแบบ =~ "15810990001" #013 14 #หมายเลขบัตรประชาชน 15 รูปแบบ = /d{18}|d{15}/16 17 #Match IP18 #จำนวนเต็มสี่กลุ่มไม่เกิน 255 คั่นด้วย '.' 19 ใส่ "IP" 20 num = /^d|[01]?d{1,2}|2[0-4]d|25[0-5]/21 = /^(#{num}.){3} #{num}$/22 #A ทั้งหมด: pattern = /^(^d|[01]?d{1,2}|2[0- 4]d|25[0-5].) {3}^d|[01]?d{1,2}|2[0-4]d|25[0-5]$/ 23 ใส่รูปแบบ =~ "127.0.0.1" # 024 ใส่รูปแบบ =~ "254.255.255.255"25 26 #Match ที่อยู่อีเมล 27 pattern = /^w+@w+.w+$/ #สิ่งนี้ไม่มี '-' 28 pattern = /^[w-]+@[w- ]+.[w-]+$/29 ใส่รูปแบบ =~ " [email protected] " #030 31 # Match url32 # http:// รูปแบบ www.google.cn33 = /(http|https|ftp): (//|\\)((w)+[.]){1,}(net|com|cn|org| ซีซี|ทีวี|[0-9]{1,3})( ((/[~]*|\[~]*)34 (w)+)|[.](w)+ )*(((([?](w)+){ 1}[=]*))*((w)+){1}([&](w)+[=]( w)+)*)*/35 36 ใส่รูปแบบ =~ " http://www.google.cn?uid=123 " #0
อื่น
ความหมายของความโลภ
1 ใส่ "greedy" 2 #Greedy หมายถึงการจับคู่สตริงที่ยาวที่สุดที่เป็นไปได้ 3 # '.' ความหมาย: อักขระอื่นที่ไม่ใช่บรรทัดใหม่ 4 str = "ที่ซึ่งทะเลบรรจบกับดินแดนพระจันทร์" 5 ใส่ str 6 match = /.* the/.match(str) 7 ใส่ match[0] # ที่ที่ทะเลมาบรรจบกัน * โลภมาก ถ้าไม่อยากโลภ ให้เติม + '? 8 #*?non-greedy 9 match = /.*?the/.match(str)10 ใส่ match[0] # โดยที่ the11 12 str.insert( 0,"Hello n")13 match = /.*?the/.match(str)14 ใส่ match[0] #where the
การดูตัวอย่างเชิงบวกและเชิงลบ
1 #การดูตัวอย่างเชิงบวกและเชิงลบ 2 ใส่ "การดูตัวอย่างเชิงบวกและเชิงลบ" 3 s1 = "พจนานุกรมโลกใหม่" 4 s2 = "ซิมโฟนีโลกใหม่" 5 s3 = "ระเบียบโลกใหม่" 6 7 reg = /โลกใหม่ (?=พจนานุกรม| Symphony)/ 8 m1 = reg.match(s1) 9 ทำให้ m1.to_a[0] # "โลกใหม่"10 m2 = reg.match(s2)11 ทำให้ m2.to_a[0] # "โลกใหม่"12 ทำให้ reg .match(s3) # nil13 14 ใส่ "ตัวอย่างเชิงลบ"15 16 reg = /New World (?!Symphony)/ # ไม่มี "Symphony" หลังจาก "New World" 17 ใส่ reg.match(s1).to_a[0 ] # "โลกใหม่"18 ใส่ reg.match(s2).to_a[0] # nil19 ใส่ reg.match(s3).to_a[0] # "โลกใหม่"
-