日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

正则表达式实例解读

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正则表达式实例解读 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 正則式 a?
  • 正則式 ^\w+\d
  • 正則式 (\d){4}|\1{2}
  • 正則式 \d{4}|\d{2}

正則式 a?

正則式:a?
被匹配的字符串:a<>aava</>ab
看下面的 Java 代碼:

String test = "a<>aava</>abb"; String reg = "a?"; System.out.println(test.replaceAll(reg, "#"));

輸出的結果是:

##<#>###v##<#/#>##b#b#

解讀下匹配過程:
正則式 a?,是表示匹配一個 a 或者 0 個 a, 沒有 a 也算匹配成功。首先匹配 a<>aava</>abb 的字符“a”,整個正則式匹配成功第 1 次,替換成 #,接著匹配第 2 個字符“<”,不是字符“a”,匹配字符失敗,而正則式可以匹配 0 個 a,所以會匹配字符“<”前面的位置,所以整個正則式匹配成功第 2 次(即第 2 次迭代匹配成功),我暈這樣也行!所以在字符“<” 前再插入第 2 個 #,后面也是依照這樣奇葩的邏輯去匹配替換。

正則式 ^\w+\d

正則式:^\w+\d
被匹配的字符串:1a2b2c2de

String test = "1a2b2c2de"; String test1 = "%1a2b2c2de" String reg = "^\\w+\\d"; // 在 Java中,正則表達式引擎認為 \ 是普通的字符,\\ 才是轉義符號 System.out.println("結果1:"+test.replaceAll(reg, "#")); System.out.println("結果2:"+test1.replaceAll(reg, "#"));

輸出結果:

結果1:#de 結果2%1a2b2c2de

匹配過程解讀:

^ 是一個虛擬的概念,表示字符串第 1 個字符的前面,字符串第 1 個字符前面有東西嗎?沒有吧,所以是一個虛擬的概念。而這個 ^ 字符告訴了正則表達式引擎要查找緊跟在頭部后面且符合正則式的字符串。

我們看到 ^ 后面跟著 \w+,而 \w 表示英文字母和阿拉伯數字中的任意一個字符,+ 則表示前面的子表達式 1 個或者多個,綜合起來的含義就是 1 個或者多個英文字母和(或)數字。所以 ^\w+ 的含義是指緊跟在頭部后面的 1 個或者多個英文字母和(或)數字。再看看正則式,后面還跟著一個 \d ,它代表匹配任意一個阿拉伯數字,所以整個正則表達式的含義是指緊跟在頭部后面的以 1 個或者多個英文字母和(或)數字組成的,且以數字為結尾的字符串。

我們看到字符串 %1a2b2c2de 查找不到符合正則式 ^\w+\d 的字符串,所以沒有替換,直接輸出原來的字符串,為什么?正則式要查找的是跟在頭部后面的且滿足正則式的字符串,現在跟在頭部后面的是 %,不滿足 \w 這個表達式,而 1a2b2c2 雖然滿足 \w+\d ,但是它并不是緊跟在頭部 ^ 的后面,它是緊跟在 % 的后面,所以結果 2 輸出原來的字符串。

正則式 (\d){4}|\1{2}

console.log("1234567890".match(/(\d){4}|\1{2}/g)); // ["1234", "5678", "", "", ""]

輸出的結果:

["1234", "5678", "", "", ""]

關于“或者”的正則表達式中,第 1 個表達式 (\d){4} 匹配成功,第 2 個表達式 \1{2} 就不會去匹配了,只有第 1 個匹配失敗,才會讓第 2 個去匹配。

修飾符g表示全文查找,因此前兩次匹配到了 “1234” 和 “5678”,此時正則引擎的指針處于數字 8 的后面,后面的字符顯然子表達式 (\d){4} 無法匹配了,此時第一個捕獲組 (\d) 匹配到內容為空,那么反向引用 \1 將指向空字符串,\1{2} 也就是一個空白字符串,后面可以匹配到 8、9、0 后面共 3 個位置,故最終又匹配到三個空字符串。

正則式 \d{4}|\d{2}

"1234567890".match(/\d{4}|\d{2}/g);

輸出結果為:

["1234", "5678", "90"]

\d{4} 匹配4個任意數字成功后,\d{2} 就不會匹配了,直到后面匹配 “90” 失敗了,才讓 \d{2} 去匹配,結果匹配成功了,字符串也到結尾了,所以最終成功匹配的結果有三個字符串。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的正则表达式实例解读的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。