-
正規表示式:
正規表示式可以讓使用者透過使用一系列的特殊字元來建構匹配模式,然後把匹配模式與資料檔案、程式輸入以及WEB頁面的表單輸入等目標物件進行比較,根據比較物件中是否包含匹配模式,執行相應的程序。正則以其簡單、實用、快速深得廣大程式設計人員的熱愛。 
編寫正規一些思維:
1、首先,確定規則。你需要匹配一個什麼樣字串,它有哪幾部分構成,它有哪些特徵。
2、提出最小單位。有的時候,有些匹配規則是重複的,我們可以試著找出共同點,規劃成一條規則。
3.根據其規則、最小單位,逐一寫出正規
4.將這些單位正規組合統一,構成你想要的完整正規。
在這裡我們就需要了解一些基本的標記和用法,任何的規則都是用基本標記組合而成的。而正規的標記也很簡單,大家不妨了解一下。
正規表示式中常用的標記
1 正規表示式中常用的標記2 ^ | 行或字串開頭3 $ | 行或字串末尾4 . | 除換行符外的字元5 w | 單字字元(數字、字母或底線) 6 W |非單字字元7 d | 數字(等同於【0-9】) 8 D | 非空白字元9 10 A | 字串開頭11 Z | 字串結尾或最後的換行符錢12 z | 字符串列末尾13 14 s | 空白字元15 S | 非空白字元16 17 b | 單字邊界(【】外)18 B | 非單字邊界19 b | 退格(在【】內)20 [] | 集合中的任何一個字符,中間使用連字符,則表示範圍,如:[0-9],[az]21 ? | 0或1個之前的表達式22 | | 或23 ( ) | 子表達式編組24 25 * | 零或多個之前的表達式26 *? | 零或多個之前的表達式(非貪婪)27 + | 1個或多個之前的表達式28 +? | 1個或多個之前的表達式(非貪婪)29 {m,n}| mn個之前的表達式30 {m,n}? | mn個之前的表達式(非貪婪的)31 32 33 還有{?=} { ?!} (?>) (?#) (?imx-imx)等
最基本的實例:
1 #符合整個字串2 puts /ruby/ =~ "ruby" # 0 3 puts /ruby/ =~ "Ruby" # nil 4 5 #符合行或字串開頭與結尾6 str = "abcdef" 7 puts str 8 puts /^abc/ =~ str # 0 9 puts /def$/ =~ str # 310 11 str = "abcndefn"12 puts /^abc/ =~ str # 013 puts /def$/ =~ str # 414 puts /abc/ =~ str # 015 puts /def/ =~ str # 416 17 #符合字串本身的開頭和結尾18 str = "abcndefn"19 puts /Aabc/ =~ str # 020 puts /defZ/ =~ str # 421 puts /defz/ =~ str # nil22 23 #符合單字字元24 puts "符合單字字元"25 pattern = /w/26 puts pattern =~ "abc " # 027 puts pattern =~ "." # nil28 29 #匹配整數30 # d 數字31 # D 非數字32 puts "匹配數字"33 puts /d/ =~ "122" #034 puts /D / =~ "122" #nil35 puts /D/ =~ "abc" #036 37 38 #邊界39 str = "This is your friend!"40 puts str41 puts str.gsub(/b/,"|" ) # |This| |is| |your| |friend|!42 puts str.gsub(/B/,"-") # This is your friend!-43
限定符實例
1 puts "限定符" 2 puts "限定符:*" 3 puts /(abc)*/ =~ "a" # 0 4 puts /(abc)*/ =~ "abc" # 0 5 6 7 puts "限定符:+" 8 puts /(abc)+/ =~ "a" # nil 9 puts /(abc)+/ =~ "abc" # 010 11 puts "限定符:?"12 puts /(abc)?/ =~ "c" # 013 puts /(abc)?/ =~ "abc" # 014 15 16 puts "限定符: {n}"17 puts /(abc){2}/ =~ "abc" # nil18 puts /(abc){2}/ =~ "abcabc" # 019 20 puts "限定符: {n,}"21 puts /(abc){2,}/ =~ "abc" # nil22 puts /(abc){ 2,}/ =~ "abcabc" # 023 24 puts "限定符: {n,m}"25 puts /(abc){2,3}/ =~ "abc" # nil26 puts /(abc){2, 3}/ =~ "abcabcabc" # 027 28 puts "限定符: *?"29 puts /(abc)*?/ =~ "a" # 030 puts /(abc)*?/ =~ "abcabc" # 031 32 puts "限定符: +?"33 puts /(abc)+?/ =~ "a" # nil34 puts /(abc)+?/ =~ "abcabc" # 035 36 puts "限定符: ??"37 puts /(abc)??/ =~ "a" # 038 puts /(abc)??/ =~ "abcabc" # 039 40 41 #匹配, {1} {3}42 # {3}能匹配,那{1}肯定能匹配,反過來不成立43 # 匹配範圍:{1} > {3}
常用實例:
1 puts "範例" 2 #符合電話號碼: 3 #一般中國的電話號碼為7-8位,區號3-4位整數,區號第一位是0,中間用分隔符號'-' 4 #注意首尾限制符5 pattern = /^0d{2,3}-d{7,8}$/ 6 puts pattern =~ "010-82809999" # 0 7 puts pattern =~ "00010-82809999" # nil 8 9 #配對手機號碼10 # 1開頭,第二位為3、5、8,11位數11 pattern = /^1[3,5,8]d{9}$/12 puts pattern =~ "15810990001" #013 14 #身分證號碼15 pattern = /d{18}|d{15}/16 17 #符合IP18 #四組不大於255的整數組成,中間用'.'分隔19 puts "IP"20 num = /^d|[01]?d{1,2}|2[0-4]d|25[0-5]/21 pattern = /^(#{num}.){3} #{num}$/22 #一個整體: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 puts pattern =~ "127.0.0.1" # 024 puts pattern =~ "254.255.255.255"25 26 #符合電子郵件 27 pattern = /^w+@w+.w+$/ #這個沒有'-'28 pattern = /^[w-]+@[w- ]+.[w-]+$/29 puts pattern =~ " [email protected] " #030 31 # 符合url32 # http://www.google.cn33 pattern = /(http|https|ftp): (//|\\)((w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})( ((/[~]*|\[~]*)34 (w)+)|[.](w)+)*(((([?](w)+){ 1}[=]*))*((w)+){1}([&](w)+[=](w)+)*)*/35 36 puts pattern =~ " http://www.google.cn?uid=123 " #0
其它
貪婪的意義
1 puts "貪婪的" 2 #貪婪的,就是匹配盡可能長的字符串3 # '.' 含義:除換行符外的字符4 str = "where the sea meets the moon-blanch'd land" 5 puts str 6 match = /.*the/.match(str) 7 puts match[0] # where the sea meets the,*是貪婪的。如果不想貪婪就在其後加上+ '?' 8 #*?非貪婪9 match = /.*?the/.match(str)10 puts match[0] # where the11 12 str.insert(0,"Hello n")13 match = /.*?the/.match(str)14 puts match[0] #where the
正負預查
1 #正負預查2 puts "正負預查" 3 s1 = "New World Dictionary" 4 s2 = "New World Symphony" 5 s3 = "New World Order" 6 7 reg = /New World (?=Dictionary| Symphony)/ 8 m1 = reg.match(s1) 9 puts m1.to_a[0] # "New World"10 m2 = reg.match(s2)11 puts m2.to_a[0] # "New World"12 puts reg .match(s3) # nil13 14 puts "負預查"15 16 reg = /New World (?!Symphony)/ # "New World "後面沒有「Symphony」17 puts reg.match(s1).to_a[0] # "New World"18 puts reg.match(s2).to_a[0] # nil19 puts reg.match(s3).to_a[0] # "New World"
-