字符優先級
相同優先級的從左到右進行運算,不同優先級的運算先高後低。
字符 | 描述 | 優先級 |
---|---|---|
\ | 轉義符 | 高 |
(), (?😃, (?=), [] | 圓括號和方括號 | |
*, +, ?, {n}, {n,}, {n,m} | 限定符 | |
^, $, \任何元字符、任何字符 | 定位點和序列(即:位置和順序) | |
| | 替換,“或"操作 字符具有高於替換運算符的優先級,使得"m|food"匹配"m"或"food”。若要匹配"mood"或"food",請使用括號創建子表達式,從而產生"(m|f)ood"。 |
低 |
元字符
字符 | 描述 | 類型 |
---|---|---|
\ | 將下個字符標記爲特殊字符/原義字符/向後引用/八進制 例:‘n’匹配"n"、’\n’匹配換行符、’\\'匹配"\"、"\(" 則匹配 “(” |
轉義符 |
^ | 匹配輸入字符串的開始位置 如設置了 RegExp 對象的 Multiline 屬性,也匹配’\n’或’\r’之後的位置 除了在方括號表達式中使用,此時它表示不接受該字符集合 |
定位符 |
$ | 匹配輸入字符串的結束位置 如果設置了RegExp 對象的 Multiline 屬性,匹配’\n’或’\r’之前的位置 |
定位符 |
* | 匹配前面的子表達式零次或多次 例如,zo* 能匹配 “z” 以及 “zoo”。等價於{0,} |
限定符 |
+ | 匹配前面的子表達式一次或多次 例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。等價於 {1,} |
限定符 |
? | 匹配前面的子表達式零次或一次 例如,“do(es)?” 可以匹配 “do” 或 “does” 。等價於 {0,1} |
限定符 |
{n} | n 是非負整數。匹配確定的 n 次 例: 'o{2}‘不能匹配"Bob"中的’o’,但能匹配"food"中的兩個 o |
限定符 |
{n,} | n 是一個非負整數。至少匹配n 次 例: ‘o{2,}‘不能匹配"Bob"中的’o’,但能匹配"foooood"中的所有 o ’o{1,}’ 等價於 ‘o+’。‘o{0,}’ 則等價於 ‘o*’ |
限定符 |
{n,m} | m 和 n 均爲非負整數,n <= m。最少匹配 n 次且最多匹配 m 次 例: “o{1,3}” 將匹配 “fooooood” 中的前三個 o ’o{0,1}’ 等價於 ‘o?’。請注意在逗號和兩個數之間不能有空格 |
限定符 |
? | 在限定符(*, +, ?, {n}, {n,}, {n,m})後面時,匹配模式是非貪婪的 非貪婪模式儘可能少的匹配所搜索的字符串 而默認的貪婪模式則儘可能多的匹配所搜索的字符串 例: 在"oooo"中’o+?'將匹配單個"o",而’o+‘將匹配所有’o’。 |
|
. | 匹配除換行符(\n、\r)之外的任何單個字符 要匹配包括 ‘\n’ 在內的任何字符,請使用"(.|\n)" |
|
(pattern) | 匹配 pattern 並捕獲結果。結果從產生的 Matches 集合得到, 在 VBScript 中用 SubMatches 集合,在 JScript 中用 $0…$9 屬性 |
捕獲組 |
(?:pattern) | 匹配 pattern 但不捕獲結果 在使用"|"字符來組合一個模式的其中一部分是很有用的 例: 'industr(?:y|ies) 比 ‘industry|industries’ 更簡略 |
非捕獲 |
(?=pattern) | 正向肯定預查(look ahead positive assert) 在任何匹配pattern的字符串開始處匹配查找字符串 不捕獲結果 例: "Windows(?=95|98|NT|2000)" 匹配"Windows2000"中的"Windows" 不匹配"Windows3.1"中的"Windows" 預查不消耗字符,即在不包含預查結果的位置開始下一次搜索 |
非捕獲 |
(?!pattern) | 正向否定預查(negative assert) 在任何不匹配pattern的字符串開始處匹配查找字符串 不捕獲結果 例: "Windows(?!95|98|NT|2000)" 匹配"Windows3.1"中的"Windows" 不匹配"Windows2000"中的"Windows" 預查不消耗字符(同上解釋) |
非捕獲 |
(?<=pattern) | 反向肯定預查(look behind) 與正向肯定預查類似,只是方向相反 例: “(?<=95|98|NT|2000)Windows" 匹配"2000Windows"中的"Windows" 不匹配"3.1Windows"中的"Windows” |
非捕獲 |
(?<!pattern) | 反向否定預查 與正向否定預查類似,只是方向相反 例: “(?<!95|98|NT|2000)Windows" 匹配"3.1Windows"中的"Windows" 不匹配"2000Windows"中的"Windows” |
非捕獲 |
x|y | 匹配 x 或 y 例: ‘z|food’ 能匹配 “z” 或 “food” ’(z|f)ood’ 則匹配 “zood” 或 “food” |
|
[xyz] | 字符集合。匹配所包含的任意一個字符 例: ‘[abc]’ 匹配 “plain” 中的 ‘a’ |
|
[^xyz] | 負值字符集合。匹配未包含的任意字符 例: ‘[^abc]’ 匹配 “plain” 中的’p’、‘l’、‘i’、‘n’ |
|
[a-z] | 字符範圍。匹配指定範圍內的任意字符 例: ‘[a-z]’ 匹配’a’到’z’範圍內的任意小寫字母字符 |
|
[^a-z] | 負值字符範圍。匹配任何不在指定範圍內的任意字符 例: '[^a-z]'可以匹配任何不在’a’到’z’範圍內的任意字符 |
|
\b | 匹配一個單詞邊界,也就是指單詞和空格間的位置 例: ‘er\b’匹配"never"中的 ‘er’,但不匹配"verb"中的’er’ |
定位符 |
\B | 匹配非單詞邊界 ’er\B’匹配"verb"中的’er’,但不匹配"never"中的’er’ |
定位符 |
\cx | 匹配由 x 指明的控制字符 例: \cM 匹配一個 Control-M 或回車符 x 的值必須爲 A-Z 或 a-z 之一。否則,將 c 視爲原義的’c’字符 |
|
\d | 匹配一個數字字符。等價於 [0-9] | |
\D | 匹配一個非數字字符。等價於 [^0-9] | |
\f | 匹配一個換頁符。等價於 \x0c 和 \cL | |
\n | 匹配一個換行符。等價於 \x0a 和 \cJ | |
\r | 匹配一個回車符。等價於 \x0d 和 \cM | |
\s | 匹配任何空白字符,包括空格、製表符、換頁符等等 等價於 [ \f\n\r\t\v]。注意 Unicode 正則表達式會匹配全角空格符 |
|
\S | 匹配任何非空白字符。等價於 [^ \f\n\r\t\v] | |
\t | 匹配一個製表符。等價於 \x09 和 \cI | |
\v | 匹配一個垂直製表符。等價於 \x0b 和 \cK | |
\w | 匹配字母、數字、下劃線。等價於’[A-Za-z0-9_]’ | |
\W | 匹配非字母、數字、下劃線。等價於 ‘[^A-Za-z0-9_]’ | |
\xn | 匹配 n,其中 n 爲十六進制轉義值 十六進制轉義值必須爲確定的兩個數字長 例: ‘\x41’ 匹配 “A”。’\x041’ 則等價於 ‘\x04’ & "1" 正則表達式中可以使用 ASCII 編碼 |
|
\num | 匹配 num,其中 num 是一個正整數 是對所獲取的匹配的引用 例: ‘(.)\1’ 匹配兩個連續的相同字符 |
|
\n | 標識一個八進制轉義值或一個向後引用 如果 \n 之前至少 n 個獲取的子表達式,則 n 爲向後引用 否則,如果 n 爲八進制數字 (0-7),則 n 爲一個八進制轉義值。 |
|
\nm | 表示 八進制轉義值 或 向後引用 1其之前至少有 nm 個獲得子表達式,則 nm 爲向後引用 2其之前至少有 n 個獲取,則 n 爲一個後跟文字 m 的向後引用 3若 n 和 m 均爲八進制數字 (0-7),則將匹配八進制轉義值 nm |
|
\nml | 如 n 爲八進制數字 (0-7) 且 m 和 l 均爲八進制數字 (0-7) 則匹配八進制轉義值 nml |
|
\un | 匹配 n,其中 n 是用4個十六進制數字表示的 Unicode 字符 例: \u00A9 匹配版權符號(©) |
字符簇
字符簇 | 描述 |
---|---|
[a-z] | 匹配所有的小寫字母 |
[A-Z] | 匹配所有的大寫字母 |
[a-zA-Z] | 匹配所有的字母 |
[0-9] | 匹配所有的數字 |
[0-9.-] | 匹配所有的數字,句號和減號 |
[ \f\r\t\n] | 匹配所有的白字符 |
[^a-z] | 除了小寫字母以外的所有字符 |
[^\/^] | 除了()(/)(^)之外的所有字符 |
[^"’] | 除了雙引號(")和單引號(’)之外的所有字符 |
PHP的正則表達式內置的通用字符簇
字符簇 | 描述 |
---|---|
[[:alpha:]] | 任何字母 |
[[:digit:]] | 任何數字 |
[[:alnum:]] | 任何字母和數字 |
[[:space:]] | 任何空白字符 |
[[:upper:]] | 任何大寫字母 |
[[:lower:]] | 任何小寫字母 |
[[:punct:]] | 任何標點符號 |
[[:xdigit:]] | 任何16進制的數字,相當於[0-9a-fA-F] |
確定重複出現
字符簇 | 描述 |
---|---|
^[a-zA-Z_]$ | 所有的字母和下劃線 |
^[[:alpha:]]{3}$ | 所有的3個字母的單詞 |
^a$ | 字母a |
^a{4}$ | aaaa |
^a{2,4}$ | aa,aaa或aaaa |
^a{1,3}$ | a,aa或aaa |
^a{2,}$ | 包含多於兩個a的字符串 |
^a{2,} | 如:aardvark和aaab,但apple不行 |
a{2,} | 如:baad和aaa,但Nantucket不行 |
\t{2} | 兩個製表符 |
.{2} | 所有的兩個字符 |
^[a-zA-Z0-9_]{1,}$ | 所有包含一個以上的字母、數字或下劃線的字符串 同^[a-zA-Z0-9_]+$ |
^[1-9][0-9]{0,}$ | 所有的正整數 同^[1-9][0-9]*$ |
^-{0,1}[0-9]{1,}$ | 所有的整數 同^-?[0-9]+$ |
^[-]?[0-9]+.?[0-9]+$ | 所有的浮點數 同^[-]?[0-9]+(.[0-9]+)?$ |
示例
正則表達式 | 描述 |
---|---|
/\b([a-z]+) \1\b/gi | 一個單詞連續出現的位置 |
/(\w+)😕/([^/:]+)(:\d*)?([^# ]*)/ | 將一個URL解析爲協議、域、端口及相對路徑 |
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ | 定位章節的位置 |
/[-a-z]/ | a至z共26個字母再加一個-號 |
/ter\b/ | 可匹配chapter,而不能匹配terminal |
/\Bapt/ | 可匹配chapter,而不能匹配aptitude |
/Windows(?=95|98|NT)/ | 可匹配Windows95或Windows98或WindowsNT,當找到一個匹配後,從Windows後面開始進行下一次的檢索匹配 |
/^\s*$/ | 匹配空行 |
/\d{2}-\d{5}/ | 驗證由兩位數字、一個連字符再加 5 位數字組成的 ID 號 |
/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*/\1\s*>/ | 匹配 HTML 標記 |
實用示例
正則表達式 | 匹配描述 |
---|---|
/^[0-9]+([.][0-9]+){0,1}$/ | 整數或者小數 |
/^[0-9]*$/ | 只能輸入數字 |
/^\d{n}$/ | 只能輸入n位的數字 |
/^\d{n,}$/ | 只能輸入至少n位的數字 |
/^\d{m,n}$/ | 只能輸入m~n位的數字 |
/^(0|[1-9][0-9]*)$/ | 只能輸入零和非零開頭的數字 |
/^[0-9]+(.[0-9]{2})?$/ | 只能輸入有兩位小數的正實數 |
/^[0-9]+(\.[0-9]{1,3})?$/ | 只能輸入有1~3位小數的正實數 |
/^\+?[1-9][0-9]*$/ | 只能輸入非零的正整數 |
/^\-[1-9][0-9]*$/ | 只能輸入非零的負整數 |
/^[a-z]+$/ | 只能輸入由26個小寫英文字母組成的字符串 |
/^[A-Z]+$/ | 只能輸入由26個大寫英文字母組成的字符串 |
/^[A-Za-z]+$/ | 只能輸入由26個英文字母組成的字符串 |
/^[A-Za-z0-9]+$/ | 只能輸入由數字和26個英文字母組成的字符串 |
/^[\u4e00-\u9fa5]{0,}$/ | 只能輸入漢字 |
/[^\x00-\xff]/ | 雙字節字符(包括漢字在內) |
/^.{3}$/ | 只能輸入長度爲3的字符 |
/[%&’,;=?$\\^]+/ | 是否含有^%&’,;=?$\"等字符 |
/^\s*|\s*$/ | 首尾空白字符 |
/\n\s*\r/ | 空白行 |
/<(\S*?)[^>]*>.*?</>|<.*? />/ | HTML標記。能匹配部分,複雜的嵌套不行 |
/^[a-zA-Z]\w{5,15}$/ | 驗證用戶名和密碼.格式:"[A-Z][a-z]_[0-9]"組成,並且第一個字必須爲字母6~16位 |
/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/ | 驗證帳號是否合法 (字母開頭,允許5-16字節,允許字母數字下劃線) |
/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/ | 驗證Email地址 |
/\d{14}[[0-9],0-9xX]/ | 驗證15位身份證號 |
/\d{17}(\d|X|x)/ | 驗證18位身份證號 |
/^(\d{3,4}-)\d{7,8}$/ | 驗證電話號碼.格式:xxx/xxxx-xxxxxxx/xxxxxxxx |
/^1([38][0-9]|4[5-9]|5[0-3,5-9]|66|7[0-8]|9[89])[0-9]{8}$/ | 驗證手機號碼(包含虛擬號碼和新號碼段) |
/[1-9][0-9]{4,}/ | 騰訊QQ號 |
/^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$/ | 驗證URL |
/[a-zA-z]+://[^\s]*/ | 網址URL |
/([1-9]{1,3}\.){3}[1-9]/ | ip地址 |
/([A-Fa-f0-9]{2}😃{5}[A-Fa-f0-9]/ | MAC地址 |
/[1-9]\\d{5}(?!\d)/ | 中國郵政編碼 |
/"^(0?[1-9]|1[0-2])$"/ | 一年的12個月。“01"~"09"和"10"~"12” |
/"^((0?[1-9])|((1|2)[0-9])|30|31)$"/ | 一個月的31天.正確格式爲:“01"~"09”、“10"~"29"和"30”~“31” |
/\\d{4}[年|\-|\.]\d{\1-\12}[月|\-|\.]\d{\1-\31}日?/ | 大多數年月日信息 |