正規表示式 Regular Expression[語法查詢/與線上測試]
正規表示式 Regular Expression[語法查詢/與線上測試]
線上執行:
http://www.phpliveregex.com/ [單純PHP]
https://regex101.com/
http://regexr.com/
http://www.regexpal.com/
http://www.regextester.com/
http://regex.larsolavtorvik.com/
優先順序
\ () (?:) (?=) [] * + {n} {n,m} ^ $ | |
常用正規表示式:
|
\w+([_.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ |
\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14} |
|
^ ->除非在方括號運算式中使用,此時它表示不接受該字元集合 \w ->數字、字母、底線== [a-zA-Z0-9_] + ->一次以上 * ->重複0此或更多次 \. ->任意符號 [] ->包含ex: [0-9] () ->內部視為變數集合 $ ->一次一行 |
|
中華民國身分證 |
[A-Z]{1}[1-2]{1}[0-9]{8}$ |
preg_match(“/[A-Z]{1}[1-2]{1}[0-9]{8}$/”, $input_line, $output_array); |
|
{n} ->前面個數 [A-Z]{1}->要1個大寫英文開頭 [1-2]{1}->之後1或2 ? ->匹配前面的子表達式零次或一次== {0,1} |
|
中文字 |
[\u4e00-\u9fa5]*$ |
UTF8字 |
[^\x00-\xff] *$ |
空白列 |
\s空白字元== [ \r\t\n\f] |
URL |
((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+$ |
IP |
(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d) |
日期 |
\d{4}(\-|\/|.)\d{1,2}\1\d{1,2} |
HTML |
<(\S*?)[^>]*>.*?</\1>|<.*? /> |
台灣市話 |
0\d{1}-\d{7,8}$ |
preg_match(“/0\d{1}-\d{7,8}$/”, $input_line, $output_array); |
|
非數字 |
^\d+$ |
只能英文 |
[A-Za-z]+$ |
只能大寫英文 |
[A-Z]+$ |
只能小寫英文 |
[a-z]+$ |
只能英數字 |
[A-Za-z0-9]+$ |
數字
只能輸入數位:[0-9]*$ 只能輸入n位元的數位:\d{n}$ 只能輸入至少n位元數字:\d{n,}$ 只能輸入m-n位元的數位:\d{m,n}$ 匹配正整數:[1-9]\d*$ 匹配負整數:-[1-9]\d*$ 匹配整數:-?[1-9]\d*$ 匹配非負整數(正整數 + 0):[1-9]\d*|0$ 匹配非正整數(負整數 + 0):-[1-9]\d*|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)$ 匹配非負浮點數(正浮點數 + 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$ |
正規表示式 |
說明及範例 |
比對不成立之字串 |
---|---|---|
/a/ |
含字母 “a” 的字串,例如 “ab”, “bac”, “cba” |
“xyz” |
/a./ |
含字母 “a” 以及其後任一個字元的字串,例如 “ab”, “bac”(若要比對.,請使用 \.) |
“a”, “ba” |
/^xy/ |
以 “xy” 開始的字串,例如 “xyz”, “xyab”(若要比對 ^,請使用 \^) |
“axy”, “bxy” |
/xy$/ |
以 “xy” 結尾的字串,例如 “axy”, “abxy”以 “xy” 結尾的字串,例如 “axy”, “abxy” (若要比對 $,請使用 \$) |
“xya”, “xyb” |
[13579] |
包含 “1” 或 “3” 或 “5” 或 “7” 或 “9” 的字串,例如:”a3b”, “1xy” |
“y2k” |
[0-9] |
含數字之字串 |
不含數字之字串 |
[a-z0-9] |
含數字或小寫字母之字串 |
不含數字及小寫字母之字串 |
[a-zA-Z0-9] |
含數字或字母之字串 |
不含數字及字母之字串 |
b[aeiou]t |
“bat”, “bet”, “bit”, “bot”, “but” |
“bxt”, “bzt” |
[^0-9] |
不含數字之字串(若要比對 ^,請使用 \^) |
含數字之字串 |
[^aeiouAEIOU] |
不含母音之字串(若要比對 ^,請使用 \^) |
含母音之字串 |
[^\^] |
不含 “^” 之字串,例如 “xyz”, “abc” |
“xy^”, “a^bc” |
.
正規表示式的特定字元 |
說明 |
等效的正規表示式 |
---|---|---|
\d |
數字 |
[0-9] |
\D |
非數字 |
[^0-9] |
\w |
數字、字母、底線 |
[a-zA-Z0-9_] |
\W |
非 \w |
[^a-zA-Z0-9_] |
\s |
空白字元 |
[ \r\t\n\f] |
\S |
非空白字元 |
[^ \r\t\n\f] |
.
正規表示式 |
說明 |
---|---|
/a?/ |
零或一個 a(若要比對? 字元,請使用 \?) |
/a+/ |
一或多個 a(若要比對+ 字元,請使用 \+) |
/a*/ |
零或多個 a(若要比對* 字元,請使用 \*) |
/a{4}/ |
四個 a |
/a{5,10}/ |
五至十個 a |
/a{5,}/ |
至少五個 a |
/a{,3}/ |
至多三個 a |
/a.{5}b/ |
a 和 b中間夾五個(非換行)字元 |
.
字元 |
說明 |
簡單範例 |
---|---|---|
\ |
避開特殊字元 |
/A\*/ 可用於比對 “A*”,其中 * 是一個特殊字元,為避開其特殊意義,所以必須加上 “\” |
^ |
比對輸入列的啟始位置 |
/^A/ 可比對 “Abcd” 中的 “A”,但不可比對 “aAb” |
$ |
比對輸入列的結束位置 |
/A$/ 可比對 “bcdA” 中的 “A”,但不可比對 “aAb” |
* |
比對前一個字元零次或更多次 |
/bo*/ 可比對 “Good boook” 中的 “booo”,亦可比對 “Good bk” 中的 “b” |
+ |
比對前一個字元一次或更多次,等效於 {1,} |
/a+/ 可比對 “caaandy” 中的 “aaa”,但不可比對 “cndy” |
? |
比對前一個字元零次或一次 |
/e?l/ 可比對 “angel” 中的 “el”,也可以比對 “angle” 中的 “l” |
. |
比對任何一個字元(但換行符號不算) |
/.n/ 可比對 “nay, an apple is on the tree” 中的 “an” 和 “on”,但不可比對 “nay” |
(x) |
比對 x 並將符合的部分存入一個變數 |
/(a*) and (b*)/ 可比對 “aaa and bb” 中的 “aaa” 和 “bb”,並將這兩個比對得到的字串設定至變數 RegExp.$1 和 RegExp.$2。 |
xy |
比對 x 或 y |
/a*b*/g 可比對 “aaa and bb” 中的 “aaa” 和 “bb” |
{n} |
比對前一個字元 n 次,n 為一個正整數 |
/a{3}/ 可比對 “lllaaalaa” 其中的 “aaa”,但不可比對 “aa” |
{n,} |
比對前一個字元至少 n 次,n 為一個正整數 |
/a{3,}/ 可比對 “aa aaa aaaa” 其中的 “aaa” 及 “aaaa”,但不可比對 “aa” |
{n,m} |
比對前一個字元至少 n 次,至多 m 次,m、n 均為正整數 |
/a{3,4}/ 可比對 “aa aaa aaaa aaaaa” 其中的 “aaa” 及 “aaaa”,但不可比對 “aa” 及 “aaaaa” |
[xyz] |
比對中括弧內的任一個字元 |
/[ecm]/ 可比對 “welcome” 中的 “e” 或 “c” 或 “m” |
[^xyz] |
比對不在中括弧內出現的任一個字元 |
/[^ecm]/ 可比對 “welcome” 中的 “w”、”l”、”o”,可見出其與 [xyz] 功能相反。(同時請注意 /^/ 與 [^] 之間功能的不同。) |
[\b] |
比對退位字元(Backspace character) |
可以比對一個 backspace ,也請注意 [\b] 與 \b 之間的差別 |
\b |
比對英文字的邊界,例如空格 |
例如 /\bn\w/ 可以比對 “noonday” 中的 ‘no’ ; |
\B |
比對非「英文字的邊界」 |
例如, /\w\Bn/ 可以比對 “noonday” 中的 ‘on’ , |
\cX |
比對控制字元(Control character),其中 X 是一個控制字元 |
/\cM/ 可以比對 一個字串中的 control-M |
\d |
比對任一個數字,等效於 [0-9] |
/[\d]/ 可比對 由 “0” 至 “9” 的任一數字 但其餘如字母等就不可比對 |
\D |
比對任一個非數字,等效於 [^0-9] |
/[\D]/ 可比對 “w” “a”… 但不可比對如 “7” “1” 等數字 |
\f |
比對 form-feed |
若是在文字中有發生 “換頁” 的行為 則可以比對成功 |
\n |
比對換行符號 |
若是在文字中有發生 “換行” 的行為 則可以比對成功 |
\r |
比對 carriage return |
|
\s |
比對任一個空白字元(White space character),等效於 [ \f\n\r\t\v] |
/\s\w*/ 可比對 “A b” 中的 “b” |
\S |
比對任一個非空白字元,等效於 [^ \f\n\r\t\v] |
/\S/\w* 可比對 “A b” 中的 “A” |
\t |
比對定位字元(Tab) |
|
\v |
比對垂直定位字元(Vertical tab) |
|
\w |
比對數字字母字元(Alphanumerical characters)或底線字母(”_”),等效於 [A-Za-z0-9_] |
/\w/ 可比對 “.A _!9” 中的 “A”、”_”、”9″。 |
\W |
比對非「數字字母字元或底線字母」,等效於 [^A-Za-z0-9_] |
/\W/ 可比對 “.A _!9” 中的 “.”、” “、”!”,可見其功能與 /\w/ 恰好相反。 |
\ooctal |
比對八進位,其中octal是八進位數目 |
/\oocetal123/ 可比對 與 八進位的ASCII中 “123” 所相對應的字元值。 |
\xhex |
比對十六進位,其中hex是十六進位數目 |
/\xhex38/ 可比對 與 16進位的ASCII中 “38” 所相對應的字元。 |