正規表示式

2021-06-22 20:56:13 字數 2903 閱讀 1730

首先是 元字元:

. :匹配除換行符以外的任意字元

[x]:匹配中括號中的任意一字元 如[abc]則匹配a或b或c

[^x] :匹配除了x以外的任意字元 :如[^abc] 則匹配除a/b/c以外的任意一字元

^ :匹配開始地方 如:^a 表示匹配以a開頭的,^[a-z] 表示以小寫任意一字母開頭的

$ :匹配結束地方 如:a$ 表示匹配以a結尾的

x|y :匹配x或匹配y 如 ^[a-z] | ^[0-9] 表示以任意一小寫字母開頭,或以任意一數字開頭的。實現上這個匹配也可以寫成^[a-z0-9],不過|還是有它的獨有的適用之處的

量詞(限定符)

? :重複0次或1次

× :重複0次或多次

+ :重複1次或多次

:重複m次

:重複m次或更多次

:重複m次至n次

例如 \"aa\" \"aaa\" \"aaaa\" 正規表示式 /^a × +等可重複多個字元,如果想要重複乙個字串又該怎麼辦,你可以用小括號來指定子表示式(也叫做分組),然後你就可以指定這個子表示式的重複次數了

例如,簡單的匹配ip位址,(\\d\\.)\\d 此表示式的意思是,前面小括號中是說匹配數字的1-3個和乙個字元.,後面乙個表示重複3次,這3次是對前面整個小括號所匹配的內容(即是乙個字串)復復3次,再後面匹配乙個1-3位的數字

後向引用

後向引用用於重複搜尋前面某個分組匹配的文字。例如,\\1代表分組1匹配的文字

例 \\b(\\w+)\\s*\\1 此表示式或匹配兩個連續的單詞,\\b匹配單詞開始位置,\\w+是匹配任意的字元至少乙個,小括號進行了第乙個編組,\\s*是匹配0個或多個空格,後面的\\1是引用了前面第乙個編組匹配成功的字串,如hello hello 對於此表示式,\\b(\\w+)是匹配了第乙個hello ,則\\1就是使用它的值--hello

(? =exp)也叫零寬先行斷言或正預查,它匹配文字中的某些位置,這些位置的後面能匹配給定的字尾exp。比如/b/w+(?=ing/b),匹配以 ing結尾的單詞的前面部分(除了ing以外的部分),如果在查詢i\'m singing while you\'re dancing.時,它會匹配sing和 danc。

(?!exp)零寬負向先行斷言,只會匹配字尾exp不存在的位置。/d(?!/d)匹配三位數字,而且這三位數字的後面不能是數字。

當正規表示式中包含能接受重複的限定符(指定數量的**,例如*, 等)時,通常在使整個表示式能得到匹配的前提下匹配盡可能多的字元。考慮這個表示式:a.*b,它將會匹配最長的以a開始,以b 結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配

在 * + {}後面加上? 表示以非貪婪法去匹配,再以上例,a.*?b去匹配aabab的話,則會匹配aab

下面是一些常用的正規表示式:

匹配中文字元的正規表示式: [\\u4e00-\\u9fa5]

評注:匹配中文還真是個頭疼的事,有了這個表示式就好辦了

匹配雙位元組字元(包括漢字在內):[^\\x00-\\xff]

評注:可以用來計算字串的長度(乙個雙位元組字元長度計2,ascii字元計1)

匹配空白行的正規表示式:\\n\\s*\\r

評注:可以用來刪除空白行

匹配html標記的正規表示式:<(\\s*?)[^>]*>.*?<\\\\1>|<.*? />

評注:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於複雜的巢狀標記依舊無能為力

匹配首尾空白字元的正規表示式:^\\s*|\\s*$

評注:可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表示式

匹配email位址的正規表示式:\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*

評注:表單驗證時很實用

匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-za-z][a-za-z0-9_]$

評注:表單驗證時很實用

匹配國內**號碼:\\d-\\d|\\d-\\d

評注:匹配形式如 0511-4405222 或 021-87888822

匹配身份證:\\d|\\d

評注:中國的身份證為15位或18位

匹配特定數字:

^[1-9]\\d*$    //匹配正整數

^-[1-9]\\d*;  //匹配負整數

^-?[1-9]\\d*$   //匹配整數

^[1-9]\\d*|0$  //匹配非負整數(正整數 + 0)

^-[1-9]\\d*|0$   //匹配非正整數(負整數 + 0)

^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*$   //匹配正浮點數

^-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*)$  //匹配負浮點數

^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)$  //匹配浮點數

^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0$   //匹配非負浮點數(正浮點數 + 0)

^(-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*))|0?\\.0+|0$  //匹配非正浮點數(負浮點數 + 0)

評注:處理大量資料時有用,具體應用時注意修正

匹配特定字串:

^[a-za-z]+$  //匹配由26個英文本母組成的字串

^[a-z]+$  //匹配由26個英文本母的大寫組成的字串

^[a-z]+$  //匹配由26個英文本母的小寫組成的字串

^[a-za-z0-9]+$  //匹配由數字和26個英文本母組成的字串

^\\w+$  //匹配由數字、26個英文本母或者下劃線組成的字串

正規表示式 正規表示式 總結

非負整數 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...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...