表1 常用的元字元
符號說明.例子: 1)匹配除換行符以外的任意字元 \w
匹配字母、數字、下劃線、漢字 \s
匹配任意的空白符,包括:空格、製表符(tab)、換行符、中文全形空格等 \d
匹配一位數字 \b
匹配單詞的開始或結束,也就是單詞的分界處 ^
匹配字串的開始 $
匹配字串的結束
0\d-\d
匹配以0為開頭,然後是5個數字,然後是乙個連字元「-」最後匹配8個數字。 2)
\ba\w*\b
匹配以字母a開頭的單詞,然後是任意數量的字母、數字、下劃線或漢字。
3)\d+
匹配1個或更多連續的數字。
4)\b\w\b
匹配5個字元的單詞。
注意:
元字元^和$都匹配乙個位置,這和\b有點類似。^匹配你要用來查詢的字串的開頭,$匹配結尾。例如乙個**如果要求你填寫的密碼必須為6位到12位字元時,可以使用:^\d$。
為什麼會有轉義字元呢?如果你想查詢某些特殊含義的字元,比如說元字元本身,這個時候直接查詢是不合適的,因為元字元會被解釋成別的意思,這個時候就會用到轉義字元(\)。例如:
c:\\users
匹配c:\users。
表2 常用的限定符
符號說明*
重複零次或更多次 +
重複一次或更多次 ?
重複零次或一次
重複n次
重複n次或更多次
重複n至m次
例子: 1)
user\d*
匹配user後面跟零個或更多個數字
表3 常用的字元匹配
符號說明[abc]
匹配字母abc
[.?!]
匹配標點符號.或?或
![a-z0-9a-z]
匹配乙個英文本母或數字
[0-9]
匹配任意乙個數字,相當於\d
例子:
1)\(?0\d[) -]?\d
匹配0個或1個
(,然後是匹配乙個
0,後面匹配兩個數字,然後是匹配
)或空格或-中的
0個或1個,最後匹配
8個數字。
正規表示式裡的分支條件是指有很多種規則,如果滿足其中的一種規則就應該予以匹配。分支條件的符號是|,用
|將不同的規則分隔開來。
例子:
1)\(?0\d\)?[- ]?\d|0\d[- ]?\d
該正規表示式可以匹配兩種型別的字串:第一,匹配0個或1個
(,後面匹配乙個
0,接著匹配兩個數字,然後匹配0個或
1個),後面匹配
-或空格
0個或者
1個,最後匹配
8個數字;第二,匹配乙個數字
0,然後匹配兩個數字,接著匹配
-或空格的0個或
1個,最後匹配
8個數字。
注意:
使用分支條件時,要注意各個條件的順序。因為匹配分支條件時,將會從左到右的測試每乙個條件,如果滿足了某個分支的話,就不會再去管其他的條件了。
當需要重複多個字元時,就會用到分組。將需要重複的多個字元用小括號括起來構成乙個子表示式,這個子表示式就是分組。將這個子表示式看成乙個整體,然後就可以指定這個子表示式的重複次數了。
例子:
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.)(2[0-4]\d|25[0-5]|[01]?\d\d?)
首先看一下第乙個小括號裡面的內容(2[0-4]\d|25[0-5]|[01]?\d\d?),這是乙個子表示式。這個子表示式裡面又有兩個分支條件。先來看第乙個分支條件,首先匹配乙個數字2,然後匹配數字
0-4中的任意乙個,最後匹配任意乙個數字。再來看第二個分支條件,首先匹配數字
25,然後匹配
0-5中的任意乙個數字。最後看第三個分支條件,首先,匹配數字0或
1中的0個或
1個,然後,匹配乙個任意的數字,最後匹配乙個任意的數字。
第乙個子表示式匹配完成之後,會匹配乙個.。
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.)匹配完成之後,會作為乙個分組繼續匹配後面的語句,即重複這個分組3次。最後繼續匹配後面的語句,後面的語句與第乙個子表示式裡面的語句相似,在此就不贅述了。
如果想要查詢除了小寫字母之外,其他任何字元都行的情況。這個時候,用反義是比較方便的,下面是一些常用的反義**。
表4 常用的反義符
符號說明\w
匹配任意不是字母,數字,下劃線,漢字的的字元 \s
匹配任意不是空白符的字元 \d
匹配任意非數字的字元 \b
匹配不是單詞開頭或結束的位置
[^a]
匹配除了a以外的任意字元
例子:
1)\d+
匹配不包含數字的字串 2)
x[^a]+
匹配以x開頭不包含
a的字串
後向引用用於重複搜尋前面某個分組匹配的文字,每個分組都會擁有乙個組號,組號的命名規則是:從左向右,以左括號為標誌,按照出現的順序命名1,2,
...。下面以乙個例子具體展開說明。
\b(\w+)\b\s+\1\b的匹配原則是:首先匹配乙個單詞,然後是乙個或多個空白符,最後是分組一中的內容。所以說,這個正規表示式最終可以匹配重複的單詞,比如like like。
組名也可以自己設定,可以使用(?\w+)或(?'xzw'\w+)來把上例的組名更改為xzw。
零寬斷言是用來查詢某些內容之前或之後(不包含內容本身)的東西的,即零寬斷言是用於指定乙個位置的,下面是常用的四種零寬斷言。
表5 常見的
4種零寬斷言
符號所謂懶惰匹配就是指匹配盡可能少的字元,下面給出幾個常用的懶惰限定符。說明(?=exp)
零寬度正**先行斷言,它斷言自身出現的位置的前面能匹配表示式exp
(?<=exp)
零寬度正回顧後發斷言,它斷言自身出現的位置的後面能匹配表示式exp
(?!exp)
零寬度負**先行斷言,斷言此位置的後面不能匹配表示式exp (?
零寬度負回顧後發斷言,斷言此位置的前面不能匹配表示式exp
表6 常用的懶惰限定符
符號說明*?
重複任意次,但盡可能少重複 +?
重複1次或更多次,但盡可能少重複
??重複0次或
1次,但盡可能少重複
?重複n到
m次,但盡可能少重複
?重複n次以上,但盡可能少重複
表7 常用分組語法
表8 其他符號 符號
說明\a
報警字元 \b
通常是單詞分界位置,但如果在字元類裡使用代表退格 \t
製表符 tab \r
回車 \v豎向製表符 \f
換頁符
\n換行符 \e
escape
\0nn
ascii**中八進位制**為
nn的字元
\xnn
ascii**中十六進製制**為
nn的字元
\unnnn
unicode**中十六進製制**為
nnnn
的字元\cn
ascii控制字元。比如
\cc代表
ctrl+c
\a字串開頭,類似^ \z
字串結尾或行尾 \z
字串結尾,類似$ \g
當前搜尋的開頭 \p
unicode中命名為
name
的字元類
(?>exp)
貪婪子表示式
(?-exp)
平衡組
(?im-nsx:exp)
在子表示式exp中改變處理選項
(?im-nsx)
為表示式後面的部分改變處理選項
(?(exp)yes|no)
把exp當做零寬正向先行斷言,如果在這個位置能匹配,使用
yes作為此組的表示式;否則使用
no(?(exp)yes)
同上,只是使用空表示式作為no
(?(name)yes|no)
如果命名為為name的組捕獲到了內容,使用
yes作為表示式;否則使用
no(?(name)yes)
同上,只是使用空表示式作為no
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
正規表示式 開發常用的正規表示式
正規表示式是一種用來進行文字匹配的工具,其語法優美簡潔。在開發中,查詢 對比以及匹配字串是家常便飯的業務,通過正規表示式我們將這些業務描述成某些需求規則,來讓我們的 更美觀 實用。例如我們要驗證使用者輸入的密碼長度是否滿足6 18位的長度,新手最常見的驗證方式是判斷輸入的密碼長度 return te...