正則表達式

首先是 元字符:
. :匹配除換行符之外的任意字符
[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,} :重複m次或更屢次
{m,n} :重複m次至n次 編碼

例如 \"aa\" \"aaa\" \"aaaa\" 正則表達式 /^a{2,3]$/ 能匹配第一個和第二個字符串,由於此表達式是說,從開頭到結尾中間是連續2個至3個a均可以。
例:\"d3df\" \"abcd\" \"3dfs4\" \"dfsde\" ,正則表達式/^[a-z]*$/ 能匹配第二個和第四個,由於此表達式是說,從開頭到結尾是0個或多個(不限制多少個)a-z以內的字符(即小寫字母)但,對此例,用/[a-z]*/則能匹配成功這四個字符串。若是換用 /[a-z]+$/則只能匹配成功除第3個字符串之外的三個字符串。爲何?此表達式是說以1個或多個連續的a-z以內(即小寫字母)的字符結尾。 3d

經常使用字符集
\\s :全部空白字符
\\S :全部非空白字符
\\w :全部字母、數字、下劃線、漢字的字符
\\W :全部不是字母、數字、下劃線、漢字的字符
\\d :全部數字字符
\\D :全部非數字字符
\\b :單詞的開始或結尾
\\B :匹配不是單詞或開始的位置
分組
上面咱們例用 {} × +等可重複多個字符,若是想要重複一個字符串又該怎麼辦,你能夠用小括號來指定子表達式(也叫作分組),而後你就能夠指定這個子表達式的重複次數了
例如,簡單的匹配IP地址,(\\d{1,3}\\.){3}\\d{1,3} 此表達式的意思是,前面小括號中是說匹配數字的1-3個和一個字符.,後面一個{3}表示重複3次,這3次是對前面整個小括號所匹配的內容(便是一個字符串)複復3次,再後面匹配一個1-3位的數字 ip

後向引用
後向引用用於重複搜索前面某個分組匹配的文本。例如,\\1表明分組1匹配的文本
\\b(\\w+)\\s*\\1 此表達式或匹配兩個連續的單詞,\\b匹配單詞開始位置,\\w+是匹配任意的字符至少一個,小括號進行了第一個編組,\\s*是匹配0個或多個空格,後面的\\1是引用了前面第一個編組匹配成功的字符串,如hello hello 對於此表達式,\\b(\\w+)是匹配了第一個hello ,則\\1就是使用它的值--hello ci

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

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

當正則表達式中包含能接受重複的限定符(指定數量的代碼,例如*, {4,8}等)時,一般在使整個表達式能獲得匹配的前提下匹配儘量多的字符。考慮這個表達式: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+)*
評註:表單驗證時很實用

匹配網址URL的正則表達式:[a-zA-z]+:\\/[^\\s]*
評註:網上流傳的版本功能頗有限,上面這個基本能夠知足需求

匹配賬號是否合法(字母開頭,容許5-16字節,容許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
評註:表單驗證時很實用

匹配國內電話號碼:\\d{3}-\\d{8}|\\d{4}-\\d{7}
評註:匹配形式如 0511-4405222 或 021-87888822

匹配騰訊QQ號:[1-9][0-9]{4,}
評註:騰訊QQ號從10000開始

匹配中國郵政編碼:[1-9]\\d{5}(?!\\d)
評註:中國郵政編碼爲6位數字

匹配身份證:\\d{15}|\\d{18}
評註:中國的身份證爲15位或18位

匹配ip地址:\\d+\\.\\d+\\.\\d+\\.\\d+
評註:簡單匹配ip地址時有用

匹配特定數字:
^[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個英文字母或者下劃線組成的字符串

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息