Character classes | |
---|---|
. | any character except newline |
\w \d \s | word, digit, whitespace |
\W \D \S | not word, digit, whitespace |
[abc] | any of a, b, or c |
[^abc] | not a, b, or c |
[a-g] | character between a & g |
Anchors | |
^abc$ | start / end of the string |
\b | word boundary |
Escaped characters | |
\. \* \\ | escaped special characters |
\t \n \r | tab, linefeed, carriage return |
\u00A9 | unicode escaped © |
Groups & Lookaround | |
(abc) | capture group |
\1 | backreference to group #1 |
(?:abc) | non-capturing group |
(?=abc) | positive lookahead |
(?!abc) | negative lookahead |
Quantifiers & Alternation | |
a* a+ a? | 0 or more, 1 or more, 0 or 1 |
a{5} a{2,} | exactly five, two or more |
a{1,3} | between one & three |
a+? a{2,}? | match as few as possible |
ab|cd | match ab or cd |
Reference: http://www.regexpal.com/
我們可以使用預先定義的字元類別:
. | 符合任一字元 |
\d | 等於 [0-9] 數字 |
\D | 等於 [^0-9] 非數字 |
\s | 等於 [ \t\n\x0B\f\r] 空白字元 |
\S | 等於 [^ \t\n\x0B\f\r] 非空白字元 |
\w | 等於 [a-zA-Z_0-9] 數字或是英文字 |
\W | 等於 [^a-zA-Z_0-9] 非數字與英文字 |
. 符合任一字元。例如有一字串abcdebcadxbc,使用.bc來比對的話,符合的子字串有abc、ebc、xbc三個;如果使用..cd,則符合的子字串只有bcd。
以上的例子來根據字元比對,您也可以使用「字元類」(Character class)來比較一組字元範圍,例如:
[abc] | a、b或c |
[^abc] | 非a、b、c的其它字元 |
[a-zA-Z] | a到z或A到Z(範圍) |
[a-d[m-p]] | a到d或m到p(聯集) |
[a-z&&[def]] | d、e或f(交集) |
[a-z&&[^bc]] | a到z,除了b與c之外(減集) |
[a-z&&[^m-p]] | a到z且沒有m到p(a-lq-z)(減集) |
一次只指定一個字元不過癮,也可以用Greedy quantifiers來指定字元可能出現的次數:
X? | X出現一次或完全沒有 |
X* | X出現零次或多次 |
X+ | X出現一次或多次 |
X{n} | X出現n次 |
X{n,} | X出現至少n次 |
X{n,m} | X出現至少n次,但不超過m次 |
Reference:
http://www.codeproject.com/Articles/9099/The-Minute-Regex-Tutorial
http://regex.learncodethehardway.org/book/