正規表示式(二)

2021-05-25 02:56:31 字數 1558 閱讀 7615

三、正規表示式高階

1. 後向引用

(exp)                  匹配exp,並捕獲文字到自動命名的組裡,命名規則為從左向右、從1開始依次分組,分組0對應整個正規表示式

/n                       重複搜尋前面分組n匹配的文字

例如 /b(/w+)/b/s+/1/b,編號為1的分組為/b(/w+)/b,表示乙個單詞,整個表示式用來匹配重複的單詞,像go go, 或者kitty kitty。

(?exp)   匹配exp,並捕獲文字到名稱為name的分組裡,也可以寫成 (?'name'exp)

/k          呼叫名為 name 的分組

例如上面的例子也可以寫成 /b(?/w+)/b/s+/k/b。

2. 零寬斷言

(?=exp)              匹配exp前面的位置

(?<=exp)            匹配exp後面的位置

例如 (?<=/bre)/w+/b,匹配以re開頭的單詞的後半部分(除了re以外的部分),例如在查詢reading a book時,它匹配ading。

3. 負向零寬斷言

(?            匹配前面不是exp的位置

(?!exp)              匹配後面跟的不是exp的位置

例如 /b/w*q(?!u)/w*/b,匹配單詞裡包含q字母且q字母後不跟u字母的字串,以q字母結尾的字母也可匹配。(若用 /b/w*q[^u]/w*/b,如果q是單詞的最後乙個字元的話,後面的[^u]將會匹配q後面的單詞分隔符,後面的/w*/b將會匹配下乙個單詞,於是 /b/w*q[^u]/w*/b 就能匹配整個iraq fighting。)

4. 注釋

(?#comment)    這種型別的分組不對正規表示式的處理產生任何影響,用於提供注釋讓人閱讀

要包含注釋的話,最好是啟用"忽略模式裡的空白符"選項,這樣在#後面到這一行結束的所有文字都將被當成注釋忽略掉。

5. 貪婪與懶惰

當正規表示式中包含能接受重複的限定符時,通常的行為是匹配盡可能多的字元,稱為貪婪匹配。有時需要匹配盡可能少的字元,稱為懶惰匹配。

*?                     重複任意次,但盡可能少重複

+?                     重複1次或更多次,但盡可能少重複

??                     重複0次或1次,但盡可能少重複

?             重複n到m次,但盡可能少重複

?                重複n次以上,但盡可能少重複

例如對於aabab,a.*b 會匹配整個字串aabab;a.*?b 會匹配aab和ab。(最先開始的匹配擁有最高的優先權,所以第乙個匹配是aab而不是ab。)

四、常用正規表示式

1. 給長串數字加分隔符(例 1,000,000) ((?<=/d)/d)+/b

2. log 檔案內容(格式為 04:03:27 127.0.0.0 hello world) @"(?(/d|/:)+)/s(?(/d|/.)+)/s(?/s+)"

3. 十六進製制表示式 /b[0-9a-fa-f]+/b

正規表示式(二) 正規表示式的切割

切割 還記得stirng的split的方法嗎.可以按照 空格,豎線 對字串進行切割.正規表示式的切割 是指,我們按照正規表示式的規則對字串來進行一些複雜的切割 比方說現在我想按照多個空格來進行切割 string str zhangsan lisei wangwu string reg s s在這裡代...

正規表示式 二

正規表示式 二 一 sed 可以將資料進行取代 刪除 新增 擷取 語法 sed nefr 動作 n 使用安靜模式。在一般sed的用法中,所有來自stdin的資料一般都會被列出到螢幕上。但是加上 n引數後,則只有經過sed特殊處理的哪一行才會被列出 e 直接在指令列模式上進行sed的動作編輯 f 直接...

正規表示式(二)

只能輸入數字 0 9 只能輸入n位的數字 d 只能輸入至少n位的數字 d 只能輸入m n位的數字 d 只能輸入零和非零開頭的數字 0 1 9 0 9 只能輸入有兩位小數的正實數 0 9 0 9 只能輸入有1 3位小數的正實數 0 9 0 9 只能輸入非零的正整數 1 9 0 9 只能輸入非零的負整數...