參考:https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin
是對字串進行操作的一種邏輯公式;應用物件是文本,
正則運算式可以用來判斷用戶名輸入的格式等是否正確,預防機制,避免錯誤格式的資料直接傳送到后端才進行判斷排除
| 元字符 | 描述 |
|---|---|
| \ | 將下一個字符標記符、或一個向后參考、或一個八進制轉義符,例如,“\n”匹配\n,“\n”匹配換行符,序列“\”匹配“\”而“(”則匹配“(”,即相當于多種編程語言中都有的“轉義字符”的概念, |
| ^ | 匹配字串的開頭,如果設定了RegExp物件的Multiline屬性,^也表示匹配行的開始處,必須為5位到12位數字時::^\d{5,12}$, |
| $ | 匹配字串的結尾,如果設定了RegExp物件的Multiline屬性,$也表示匹配行的結束處, |
| .* | 表示數量,指前面的內容可以重復出現無數次,\bhi\b. *\blucky\b表示:先是一個單詞hi,然后是任意個任意字符(但不能是換行),最后是Lucy這個單詞,重復0次或更多次 |
| + | 重復一次或更多次, |
| ? | 匹配前面的子運算式零次或一次,例如,“do(es)?”可以匹配“do”或“does”,?等價于{0,1}, |
| {n} | 匹配確定的n次, |
| {n,} | 重復n次或更多次, |
| {n,m} | 重復n到m次,請注意在逗號和兩個數之間不能有空格, |
| ? | 當該字符緊跟在任何一個其他限制符(,+,?,{n},{n,},{n,m*})后面時,匹配模式是非貪婪的,非貪婪模式盡可能少地匹配所搜索的字串,而默認的貪婪模式則盡可能多地匹配所搜索的字串,例如,對于字串“oooo”,“o+”將盡可能多地匹配“o”,得到結果[“oooo”],而“o+?”將盡可能少地匹配“o”,得到結果 ['o', 'o', 'o', 'o'] |
| .點 | 匹配除“\n”和"\r"之外的任何單個字符,要匹配包括“\n”和"\r"在內的任何字符,請使用像“[\s\S]”的模式, |
| (pattern) | 匹配pattern并獲取這一匹配,所獲取的匹配可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性,要匹配圓括號字符,請使用“(”或“)”, |
| (?:pattern) | 非獲取匹配,匹配pattern但不獲取匹配結果,不進行存盤供以后使用,這在使用或字符“(|)”來組合一個模式的各個部分時很有用,例如“industr(?:y|ies)”就是一個比“industry|industries”更簡略的運算式, |
| (?=pattern) | 非獲取匹配,正向肯定預查,在任何匹配pattern的字串開始處匹配查找字串,該匹配不需要獲取供以后使用,例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”,預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始, |
| (?!pattern) | 非獲取匹配,正向否定預查,在任何不匹配pattern的字串開始處匹配查找字串,該匹配不需要獲取供以后使用,例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”, |
| (?<=pattern) | 非獲取匹配,反向肯定預查,與正向肯定預查類似,只是方向相反,例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”,*python的正則運算式沒有完全按照正則運算式規范實作,所以一些高級特性建議使用其他語言如java、scala等 |
| (?<!patte_n) | 非獲取匹配,反向否定預查,與正向否定預查類似,只是方向相反,例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”,*python的正則運算式沒有完全按照正則運算式規范實作,所以一些高級特性建議使用其他語言如java、scala等 |
| x|y | 匹配x或y,例如,“z|food”能匹配“z”或“food”(此處請謹慎),“[z|f]ood”則匹配“zood”或“food”, |
| [xyz] | 字符集合,匹配所包含的任意一個字符,例如,“[abc]”可以匹配“plain”中的“a”, |
| [^xyz] | 負值字符集合,匹配未包含的任意字符,例如,“abc”可以匹配“plain”中的“plin”任一字符, |
| [a-z] | 字符范圍,匹配指定范圍內的任意字符,例如,“[a-z]”可以匹配“a”到“z”范圍內的任意小寫字母字符,注意:只有連字符在字符組內部時,并且出現在兩個字符之間時,才能表示字符的范圍; 如果出字符組的開頭,則只能表示連字符本身. |
| [^a-z] | 負值字符范圍,匹配任何不在指定范圍內的任意字符,例如,“a-z”可以匹配任何不在“a”到“z”范圍內的任意字符, |
| \b | 匹配一個單詞的邊界,開始或結束,代表單詞的分界處 |
| \B | 匹配非單詞開頭或結尾的邊界,“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”, |
| \cx | 匹配由x指明的控制字符,例如,\cM匹配一個Control-M或回車符,x的值必須為A-Z或a-z之一,否則,將c視為一個原義的“c”字符, |
| \d | 匹配一個數字字符,[0-9] 匹配這樣的字串:以0開頭,然后是兩個數字,然后是一個連字號“-”,最后是8個數字=======: 0\d{2}-\d{8} ;0\d\d-\d\d\d\d\d\d\d\d, |
| \D | 匹配任意非數字的字符,等價于0-9,grep要加上-P,perl正則支持 |
| \f | 匹配一個換頁符,等價于\x0c和\cL, |
| \n | 匹配一個換行符,等價于\x0a和\cJ, |
| \r | 匹配一個回車符,等價于\x0d和\cM, |
| \s | 匹配任何空白符,包括空格、制表符、換頁符等等,等價于[ \f\n\r\t\v], |
| \S | 匹配任何非空白符的字符,等價于 \f\n\r\t\v, |
| \t | 匹配一個制表符,等價于\x09和\cI, |
| \v | 匹配一個垂直制表符,等價于\x0b和\cK, |
| \w | 匹配數字或字母或下劃線或漢字,[a-z0-9A-Z_] 可以理解為表示單詞 |
| \W | 匹配任何非數字字母下劃線漢字的字符, |
| \xn | 匹配n,其中n為十六進制轉義值,十六進制轉義值必須為確定的兩個數字長,例如,“\x41”匹配“A”,“\x041”則等價于“\x04&1”,正則運算式中可以使用ASCII編碼, |
| *num* | 匹配num,其中num是一個正整數,對所獲取的匹配的參考,例如,“(.)\1”匹配兩個連續的相同字符, |
| *n* | 標識一個八進制轉義值或一個向后參考,如果*n之前至少n個獲取的子運算式,則n為向后參考,否則,如果n為八進制數字(0-7),則n*為一個八進制轉義值, |
| *nm* | 標識一個八進制轉義值或一個向后參考,如果*nm之前至少有nm個獲得子運算式,則nm為向后參考,如果*nm之前至少有n個獲取,則n為一個后跟文字m的向后參考,如果前面的條件都不滿足,若n和m均為八進制數字(0-7),則*nm將匹配八進制轉義值nm*, |
| *nml* | 如果n為八進制數字(0-7),且m和l均為八進制數字(0-7),則匹配八進制轉義值nml, |
| \un | 匹配n,其中n是一個用四個十六進制數字表示的Unicode字符,例如,\u00A9匹配著作權符號(©), |
| \p{P} | 小寫 p 是 property 的意思,表示 Unicode 屬性,用于 Unicode 正運算式的前綴,中括號內的“P”表示Unicode 字符集七個字符屬性之一:標點字符,其他六個屬性:L:字母;M:標記符號(一般不會單獨出現);Z:分隔符(比如空格、換行等);S:符號(比如數學符號、貨幣符號等);N:數字(比如阿拉伯數字、羅馬數字等);C:其他字符,*注:此語法部分語言不支持,例:javascript, |
| <> | 匹配詞(word)的開始(<)和結束(>),例如正則運算式<the>能夠匹配字串"for the wise"中的"the",但是不能匹配字串"otherwise"中的"the",注意:這個元字符不是所有的軟體都支持的, |
| ( ) | 將( 和 ) 之間的運算式定義為“組”(group),并且將匹配這個運算式的字符保存到一個臨時區域(一個正則運算式中最多可以保存9個),它們可以用 \1 到\9 的符號來參考, |
| | | 將兩個匹配條件進行邏輯“或”(or)運算,例如正則運算式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them.",注意:這個元字符不是所有的軟體都支持的, |
https://sourceforge.net/projects/regextester/ regex tester下載地址
\(?0\d{2}[) -]?\d{8} \( --------表示轉義字符; ?0-----表示前面的括號出現0次或1次; \d{2}-----表示兩個數字; [)- ]? ---表示括號或-或空格,出現0次或1次; \d{8}-----表示8個數字,
分枝條件是從左到右地測驗每個條件的,如果滿足了某個分枝的話,就不會再去管其他的條件了,
后向參考:用于重復搜索前面某個分組匹配的文本
指定一個子運算式的組名,請使用這樣的語法:(?<Word>\w+)(或者把尖括號換成'也行:(?'Word'\w+)),這樣就把\w+的組名指定為Word了
| 分類 | 代碼/語法 | 說明 |
|---|---|---|
| 捕獲 | (exp) | 匹配exp,并捕獲文本到自動命名的組里 |
| (?<name>exp) | 匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?'name'exp) | |
| (?:exp) | 匹配exp,不捕獲匹配的文本,也不給此分組分配組號 | |
| 零寬斷言 | (?=exp) | 匹配exp前面的位置 |
| (?<=exp) | 匹配exp后面的位置 | |
| (?!exp) | 匹配后面跟的不是exp的位置 | |
| (?<!exp) | 匹配前面不是exp的位置 | |
| 注釋 | (?#comment) | 這種型別的分組不對正則運算式的處理產生任何影響,用于提供注釋讓人閱讀 |
:(?<=<(\w+)>).*(?=<\/\1>)
尚未詳細討論的語法
| 代碼/語法 | 說明 |
|---|---|
| \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{name} | Unicode中命名為name的字符類,例如\p{IsGreek} |
| (?>exp) | 貪婪子運算式 |
| (?<x>-<y>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 |
常用的正則運算式主要有以下幾種: 匹配中文字符的正則運算式: [\u4e00-\u9fa5] “\u4e00 ” 一 獲取日期正則運算式:\d{4}[年|\-|\.]\d{1,2}[月|\-|\.]\d{1,2}日? 匹配雙位元組字符(包括漢字在內):[^\x00-\xff] 匹配空白行的正則運算式:\n\s*\r 評注:可以用來洗掉空白行 匹配HTML標記的正則運算式:<(\S*?)[^>]*>.*?</>|<.*? /> 匹配首尾空白字符的正則運算式:^\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{4}-\d{7}|\d{3}-\d{8} 評注:匹配形式如 0511-4405222 或 021-87888822 ^((1[3,5,8][0-9])|(14[5,7])|(17[0,6,7,8])|(19[7]))\\d{8}$ 匹配騰訊QQ號:[1-9][0-9]\{4,\} 評注:騰訊QQ號從10000開始 匹配中國郵政編碼:[1-9]\d(?!\d) 評注:中國郵政編碼為6位數字 匹配身份證:\d{17}[\d|X]|\d{15} 評注:中國的身份證為15位或18位 匹配ip地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\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個英文字母或者下劃線組成的字串
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/34058.html
標籤:HTML5
下一篇:HTTP Referer
