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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

正则表达式必知必会

發(fā)布時間:2023/12/13 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正则表达式必知必会 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、概述

正則表達(dá)式用于文本內(nèi)容的查找和替換。

正則表達(dá)式內(nèi)置于其它語言或者軟件產(chǎn)品中,它本身不是一種語言或者軟件。

正則表達(dá)式在線工具

二、匹配單個字符

. 可以用來匹配任何的單個字符,但是在絕大多數(shù)實現(xiàn)里面,不能匹配換行符;

. 是元字符,表示它有特殊的含義,而不是字符本身的含義。如果需要匹配 . ,那么要用 \ 進(jìn)行轉(zhuǎn)義,即在 . 前面加上 \ 。

正則表達(dá)式一般是區(qū)分大小寫的,但也有些實現(xiàn)不區(qū)分。

正則表達(dá)式

rabbit

匹配結(jié)果

My name is rabbit .

三、匹配一組字符

[ ] 定義一個字符集合;

0-9、a-z 定義了一個字符區(qū)間,區(qū)間使用 ASCII 碼來確定,字符區(qū)間在 [ ] 中使用。

- 只有在 [ ] 之間才是元字符,在 [ ] 之外就是一個普通字符;

^ 在 [ ] 中是取非操作。

應(yīng)用

匹配以 abc 為開頭,并且最后一個字母不為數(shù)字的字符串:

正則表達(dá)式

abc[^0-9]

匹配結(jié)果

  • abcd
  • abc1
  • abc2
  • 四、使用元字符

    匹配空白字符

    元字符說明
    [\b]回退(刪除)一個字符
    \f換頁符
    \n換行符
    \r回車符
    \t制表符
    \v垂直制表符

    \r\n 是 Windows 中的文本行結(jié)束標(biāo)簽,在 Unix/Linux 則是 \n。

    \r\n\r\n 可以匹配 Windows 下的空白行,因為它匹配兩個連續(xù)的行尾標(biāo)簽,而這正是兩條記錄之間的空白行;

    匹配特定的字符

    1. 數(shù)字元字符

    元字符說明
    \d數(shù)字字符,等價于 [0-9]
    \D非數(shù)字字符,等價于 [^0-9]

    2. 字母數(shù)字元字符

    元字符說明
    \w大小寫字母,下劃線和數(shù)字,等價于 [a-zA-Z0-9_]
    \W對 \w 取非

    3. 空白字符元字符

    元字符說明
    \s任何一個空白字符,等價于 [\f\n\r\t\v]
    \S對 \s 取非

    \x 匹配十六進(jìn)制字符,\0 匹配八進(jìn)制,例如 \xA 對應(yīng)值為 10 的 ASCII 字符 ,即 \n。

    五、重復(fù)匹配

    • + 匹配 1 個或者多個字符
    • ** * 匹配 0 個或者多個字符
    • ? 匹配 0 個或者 1 個字符

    應(yīng)用

    匹配郵箱地址。

    正則表達(dá)式

    [\w.]+@\w+\.\w+

    [\w.] 匹配的是字母數(shù)字或者 . ,在其后面加上 + ,表示匹配多次。在字符集合 [ ] 里,. 不是元字符;

    匹配結(jié)果

    abc.def@qq.com

    • {n} 匹配 n 個字符
    • {m,n} 匹配 m~n 個字符
    • {m,} 至少匹配 m 個字符

    * 和 + 都是貪婪型元字符,會匹配盡可能多的內(nèi)容。在后面加 ? 可以轉(zhuǎn)換為懶惰型元字符,例如 *?、+? 和 {m,n}? 。

    正則表達(dá)式

    a.+c

    匹配結(jié)果

    abcabcabc

    由于 + 是貪婪型的,因此 .+ 會匹配更可能多的內(nèi)容,所以會把整個 abcabcabc 文本都匹配,而不是只匹配前面的 abc 文本。用懶惰型可以實現(xiàn)匹配前面的。

    六、位置匹配

    單詞邊界

    \b 可以匹配一個單詞的邊界,邊界是指位于 \w 和 \W 之間的位置;\B 匹配一個不是單詞邊界的位置。

    \b 只匹配位置,不匹配字符,因此 \babc\b 匹配出來的結(jié)果為 3 個字符。

    字符串邊界

    ^ 匹配整個字符串的開頭,$ 匹配結(jié)尾。

    ^ 元字符在字符集合中用作求非,在字符集合外用作匹配字符串的開頭。

    分行匹配模式(multiline)下,換行被當(dāng)做字符串的邊界。

    應(yīng)用

    匹配代碼中以 // 開始的注釋行

    正則表達(dá)式

    ^\s*\/\/.*$

    匹配結(jié)果

  • public void fun() {
  • ???? // 注釋 1
  • ???? int a = 1;
  • ???? int b = 2;
  • ???? // 注釋 2
  • ???? int c = a + b;
  • }
  • 七、使用子表達(dá)式

    使用 ( ) 定義一個子表達(dá)式。子表達(dá)式的內(nèi)容可以當(dāng)成一個獨立元素,即可以將它看成一個字符,并且使用 * 等元字符。

    子表達(dá)式可以嵌套,但是嵌套層次過深會變得很難理解。

    正則表達(dá)式

    (ab){2,}

    匹配結(jié)果

    ababab

    | 是或元字符,它把左邊和右邊所有的部分都看成單獨的兩個部分,兩個部分只要有一個匹配就行。

    正則表達(dá)式

    (19|20)\d{2}

    匹配結(jié)果

  • 1900
  • 2010
  • 1020
  • 應(yīng)用

    匹配 IP 地址。

    IP 地址中每部分都是 0-255 的數(shù)字,用正則表達(dá)式匹配時以下情況是合法的:

    • 一位數(shù)字
    • 不以 0 開頭的兩位數(shù)字
    • 1 開頭的三位數(shù)
    • 2 開頭,第 2 位是 0-4 的三位數(shù)
    • 25 開頭,第 3 位是 0-5 的三位數(shù)

    正則表達(dá)式

    ((25[0-5]|(2[0-4]\d)|(1\d{2})|([1-9]\d)|(\d))\.){3}(25[0-5]|(2[0-4]\d)|(1\d{2})|([1-9]\d)|(\d))

    匹配結(jié)果

  • 192.168.0.1
  • 00.00.00.00
  • 555.555.555.555
  • 八、回溯引用

    回溯引用使用 \n 來引用某個子表達(dá)式,其中 n 代表的是子表達(dá)式的序號,從 1 開始。它和子表達(dá)式匹配的內(nèi)容一致,比如子表達(dá)式匹配到 abc,那么回溯引用部分也需要匹配 abc 。

    應(yīng)用

    匹配 HTML 中合法的標(biāo)題元素。

    正則表達(dá)式

    \1 將回溯引用子表達(dá)式 (h[1-6]) 匹配的內(nèi)容,也就是說必須和子表達(dá)式匹配的內(nèi)容一致。

    <(h[1-6])>\w*?<\/\1>

    匹配結(jié)果

  • <h1>x</h1>
  • <h2>x</h2>
  • <h3>x</h1>
  • 替換

    需要用到兩個正則表達(dá)式。

    應(yīng)用

    修改電話號碼格式。

    文本

    313-555-1234

    查找正則表達(dá)式

    (\d{3})(-)(\d{3})(-)(\d{4})

    替換正則表達(dá)式

    在第一個子表達(dá)式查找的結(jié)果加上 () ,然后加一個空格,在第三個和第五個字表達(dá)式查找的結(jié)果中間加上 - 進(jìn)行分隔。

    ($1) $3-$5

    結(jié)果

    (313) 555-1234

    大小寫轉(zhuǎn)換

    元字符說明
    \l把下個字符轉(zhuǎn)換為小寫
    \u把下個字符轉(zhuǎn)換為大寫
    \L把\L 和\E 之間的字符全部轉(zhuǎn)換為小寫
    \U把\U 和\E 之間的字符全部轉(zhuǎn)換為大寫
    \E結(jié)束\L 或者\U

    應(yīng)用

    把文本的第二個和第三個字符轉(zhuǎn)換為大寫。

    文本

    abcd

    查找

    (\w)(\w{2})(\w)

    替換

    $1\U$2\E$3

    結(jié)果

    aBCd

    九、前后查找

    前后查找規(guī)定了匹配的內(nèi)容首尾應(yīng)該匹配的內(nèi)容,但是又不包含首尾匹配的內(nèi)容。

    向前查找使用 ?= 定義,它規(guī)定了尾部匹配的內(nèi)容,這個匹配的內(nèi)容在 ?= 之后定義。所謂向前查找,就是規(guī)定了一個匹配的內(nèi)容,然后以這個內(nèi)容為尾部向前面查找需要匹配的內(nèi)容。向后匹配用 ?<= 定義(注: JavaScript 不支持向后匹配,Java 對其支持也不完善)。

    應(yīng)用

    查找出郵件地址 @ 字符前面的部分。

    正則表達(dá)式

    \w+(?=@)

    結(jié)果

    abc @qq.com

    對向前和向后查找取非,只要把 = 替換成 ! 即可,比如 (?=) 替換成 (?!) 。取非操作使得匹配那些首尾不符合要求的內(nèi)容。

    十、嵌入條件

    回溯引用條件

    條件為某個子表達(dá)式是否匹配,如果匹配則需要繼續(xù)匹配條件表達(dá)式后面的內(nèi)容。

    正則表達(dá)式

    子表達(dá)式 (\() 匹配一個左括號,其后的 ? 表示匹配 0 個或者 1 個。 ?(1) 為條件,當(dāng)子表達(dá)式 1 匹配時條件成立,需要執(zhí)行 ) 匹配,也就是匹配右括號。

    (\()?abc(?(1)\))

    結(jié)果

  • (abc)
  • abc
  • (abc
  • 前后查找條件

    條件為定義的首尾是否匹配,如果匹配,則繼續(xù)執(zhí)行后面的匹配。注意,首尾不包含在匹配的內(nèi)容中。

    正則表達(dá)式

    ?(?=-) 為前向查找條件,只有在以 - 為前向查找的結(jié)尾能匹配 \d{5} ,才繼續(xù)匹配 -\d{4} 。

    \d{5}(?(?=-)-\d{4})

    結(jié)果

  • 11111
  • 22222-
  • 33333-4444
  • 參考資料

    • BenForta. 正則表達(dá)式必知必會 [M]. 人民郵電出版社, 2007.

    總結(jié)

    以上是生活随笔為你收集整理的正则表达式必知必会的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。