第十章 正則表達(dá)式

正則表達(dá)式

一、普通字符

定義:字母、數(shù)字、漢字、下劃線、以及沒(méi)有特殊定義的標(biāo)點(diǎn)符

號(hào),都是“普通字符”。表達(dá)式中的普通字符,在匹配一

個(gè)字符串的時(shí)候,匹配與之相同的一個(gè)字符。

1.1 簡(jiǎn)單的轉(zhuǎn)義字符:

\n 代表?yè)Q行符
\t 制表符
\ 代表\本身
^ ,$,.,(, ) , {, } , ? , + , * , 匹配這些字符本身

1.2 標(biāo)準(zhǔn)字符集合

能夠與 ‘多種字符’ 匹配的表達(dá)式

注意區(qū)分大小寫(xiě),大寫(xiě)是相反的意思

\d 任意一個(gè)數(shù)字,0~9 中的任意一個(gè)
\w 任意一個(gè)字母或數(shù)字或下劃線,也就是 AZ,az,0~9,_ 中任意一個(gè)
\s 包括空格、制表符、換行符等空白字符的其中任意一個(gè)
. 小數(shù)點(diǎn)可以匹配任意一個(gè)字符(除了換行符) 如果要匹配包括“\n”在內(nèi)的所有字符,一般用[\s\S]

二、自定義字符集合

[ ]方括號(hào)匹配方式,能夠匹配方括號(hào)中任意一個(gè)字符:”[]“內(nèi)的字符是或的關(guān)系。

[ab5@] 匹配 "a" 或 "b" 或 "5" 或 "@"
[^ abc] 匹配 "a","b","c" 之外的任意一個(gè)字符
[f-k] 匹配 "f"~"k" 之間的任意一個(gè)字母
[^A-F0-3] 匹配 "A""F","0""3" 之外的任意一個(gè)字符

注意:正則表達(dá)式的特殊符號(hào),被包含到中括號(hào)中,則失去特殊意義,除了

^,-之外。

– 標(biāo)準(zhǔn)字符集合,除小數(shù)點(diǎn)外,如果被包含于中括號(hào),自定義字符集合

將包含該集合。比如:

? [\d.\-+]將匹配:數(shù)字、小數(shù)點(diǎn)、+、-

三、量詞(– 修飾匹配次數(shù)的特殊符號(hào))

{n} 表達(dá)式重復(fù)n次 備注:
{m,n} 表達(dá)式至少重復(fù)m次,最多重復(fù)n次 貪婪模式:{m,n}?:以m次數(shù)為標(biāo)準(zhǔn)開(kāi)始,滿足就執(zhí)行
{m,} 表達(dá)式至少重復(fù)m次
? 匹配表達(dá)式0次或者1次,相當(dāng)于 {0,1} a?b : ab或者adb
+ 表達(dá)式至少出現(xiàn)1次,相當(dāng)于 {1,} a+b : adsfb
* 表達(dá)式不出現(xiàn)或出現(xiàn)任意次,相當(dāng)于 {0,} a*b : ab/asdfb/adb

注意:匹配次數(shù)中的貪婪模式(匹配字符越多越好,<u>默認(rèn)</u>!)

? 匹配次數(shù)中的非貪婪模式(匹配字符越少越好,修飾匹配次數(shù)

的特殊符號(hào)后再加上一個(gè) <u>"?"</u> 號(hào))

四、字符邊界

(本組標(biāo)記匹配的不是字符而是位置,符合某種條件的位置)

^ 與字符串開(kāi)始的地方匹配
$ 與字符串結(jié)束的地方匹配
\b 匹配一個(gè)單詞邊界

注意:– \b匹配這樣一個(gè)位置:前面的字符和后面的字符不全是\w。

五、 正則表達(dá)式的匹配模式

IGNORECASE 忽略大小寫(xiě)模式

– 匹配時(shí)忽略大小寫(xiě)。

– 默認(rèn)情況下,正則表達(dá)式是要區(qū)分大小寫(xiě)的。

? SINGLELINE 單行模式

– 整個(gè)文本看作一個(gè)字符串,只有一個(gè)開(kāi)頭,一個(gè)結(jié)尾。

– 使小數(shù)點(diǎn) "." 可以匹配包含換行符(\n)在內(nèi)的任意字符。

? MULTILINE 多行模式

– 每行都是一個(gè)字符串,都有開(kāi)頭和結(jié)尾。

– 在指定了 MULTILINE 之后,如果需要僅匹配字符串開(kāi)始和結(jié)束位置,可以使

用 \A 和 \Z

六、選擇符和分組、反向引用

表達(dá)式 作用
| 分支結(jié)構(gòu) 左右兩邊表達(dá)式之間 "或" 關(guān)系,匹配左邊或者右邊
()捕獲組 在被修飾匹配次數(shù)的時(shí)候,括號(hào)中的表達(dá)式可以作為整體被修飾<br />. 取匹配結(jié)果的時(shí)候,括號(hào)中的表達(dá)式匹配到的內(nèi)容可以被單獨(dú)得到<br />每一對(duì)括號(hào)會(huì)分配一個(gè)編號(hào),使用 () 的捕獲根據(jù)左括號(hào)的順序從 1<br />開(kāi)始自動(dòng)編號(hào)。捕獲元素編號(hào)為零的第一個(gè)捕獲是由整個(gè)正則表達(dá)式模式<br />匹配的文本
(?:Expression) 一些表達(dá)式中,不得不使用( ),但又不需要保存( )中子表達(dá)式匹配的內(nèi)容,這時(shí)可以用非捕獲組來(lái)抵消使用( )帶來(lái)的副作用

反向引用(\nnn)

– 每一對(duì)()會(huì)分配一個(gè)編號(hào),使用 () 的捕獲根據(jù)左括號(hào)的順序從 1 開(kāi)始自動(dòng)編號(hào)。

– 通過(guò)反向引用,可以對(duì)分組已捕獲的字符串進(jìn)行引用。

七、預(yù)搜索(零寬斷言)

– 只進(jìn)行子表達(dá)式的匹配,匹配內(nèi)容不計(jì)入最終的匹配結(jié)果,是零寬度

– 這個(gè)位置應(yīng)該符合某個(gè)條件。判斷當(dāng)前位置的前后字符,是否符合指

定的條件,但不匹配前后的字符。是對(duì)位置的匹配。

– 正則表達(dá)式匹配過(guò)程中,如果子表達(dá)式匹配到的是字符內(nèi)容,而非位置,并被

保存到最終的匹配結(jié)果中,那么就認(rèn)為這個(gè)子表達(dá)式是占有字符的;如果子表

達(dá)式匹配的僅僅是位置,或者匹配的內(nèi)容并不保存到最終的匹配結(jié)果中,那么

就認(rèn)為這個(gè)子表達(dá)式是零寬度的。占有字符還是零寬度,是針對(duì)匹配的內(nèi)容是

否保存到最終的匹配結(jié)果中而言的。

(?=exp) 斷言自身出現(xiàn)的位置的后面能匹配表達(dá)式exp
(?<=exp) 斷言自身出現(xiàn)的位置的前面能匹配表達(dá)式exp
(?!exp) 斷言此位置的后面不能匹配表達(dá)式exp
(?<!exp) 斷言此位置的前面不能匹配表達(dá)式exp

八、常用正則表達(dá)式列表

匹配中文字符 [\u4e00-\u9fa5]
匹配空白行 \n\s*\r
匹配HTML標(biāo)記 <(\S?)[^>]>.*?</\1>
匹配首尾空白字符 ^\s*
匹配Email地址 \w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
匹配網(wǎng)址URL [a-zA-z]+://[^\s]*
匹配國(guó)內(nèi)電話號(hào)碼 \d{3}-\d{8}
匹配騰訊QQ號(hào) [ 1-9][0-9]{4,}
匹配中國(guó)郵政編碼 [1-9]\d{5}(?!\d)
匹配身份證 \d{15}
匹配ip地址 \d+.\d+.\d+.\d+

練習(xí):匹配電話號(hào)碼(固話和手機(jī)號(hào)):(0\d{2,3}-\d{7,9})|(1[35789]\d{9})
匹配電子郵箱:[\w-]+@[a-z0-9A-Z]+(.[A-Za-z]{2,4}{1,2})

九、java中使用正則表達(dá)式

相關(guān)類(lèi)位于:java.util.regex包下面

? 類(lèi) Pattern

– 正則表達(dá)式的編譯表示形式。

– Pattern p = Pattern.compile(r,int); //建立正則表達(dá)式,并啟用相應(yīng)模式

? 類(lèi) Matcher

– 通過(guò)解釋 Pattern 對(duì) character sequence 執(zhí)行匹配操作的引擎

– Matcher m = p.matcher(str); //匹配str字符串

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 資源來(lái)自菜鳥(niǎo)教程:http://www.runoob.com/regexp/regexp-syntax.html ...
    賊厲害閱讀 11,092評(píng)論 0 6
  • Python中的正則表達(dá)式(re) import rere.match #從開(kāi)始位置開(kāi)始匹配,如果開(kāi)頭沒(méi)有則無(wú)re...
    BigJeffWang閱讀 7,606評(píng)論 0 99
  • 正則表達(dá)式描述的是一種規(guī)則,符合這種限定規(guī)則的字符串我們認(rèn)為它某種滿足條件的,是我們所需的。在正則表達(dá)式中,主要有...
    Single_YAM閱讀 792評(píng)論 0 4
  • 1、正則表達(dá)式 在開(kāi)發(fā)中,通常很多數(shù)據(jù)都會(huì)使用String類(lèi)存儲(chǔ)。原因:操作字符串的功能比較多,比較方便。在操作S...
    Villain丶Cc閱讀 1,903評(píng)論 0 5
  • 回家 早早的清晨 從朦朧中醒來(lái) 藐視沒(méi)有熟睡 心里想著回家 心情無(wú)比激動(dòng) 在車(chē)上 窗外的田野 在陽(yáng)光的照射下 顯的...
    愛(ài)笑丫頭_e800閱讀 402評(píng)論 2 2

友情鏈接更多精彩內(nèi)容