Regex 正規表示法 - 字元類別 (Character Classes)
Regex 定義了一些字元類別 (Character Classes) 符號,用來表示一組特定的字符集。
. dot
點號 (dot or period) . 用來匹配除了換行符號 (line breaks) \n \r 之外的任何一個字元。
例子:
a.c 可以用來匹配 "abc", "aGc", "a c", "a5c", "a_c", "a#c" 等字串,但不能匹配 "a\nc"。
JavaScript 使用範例
/a.c/.test('abc'); // true
/a.c/.test('a#c'); // true
/a.c/.test('a\nc'); // false
Python 使用範例
import re
bool(re.search('a.c', 'abc')) # True
bool(re.search('a.c', 'a#c')) # True
bool(re.search('a.c', 'a\nc')) # False
PHP 使用範例
preg_match('/a.c/', 'abc'); // 1
preg_match('/a.c/', 'a#c'); // 1
preg_match('/a.c/', "a\nc"); // 0
Ruby 使用範例
/a.c/ =~ 'abc' # 0
/a.c/ =~ 'a#c' # 0
/a.c/ =~ "a\nc" # nil
[\s\S] match any
[\s\S] 用來匹配任意一個字元,包含換行符號。
例子:
a[\s\S]c 可以用來匹配 "abc", "aGc", "a c", "a5c", "a_c", "a#c", "a\nc" 等字串。
JavaScript 使用範例
/a[\s\S]c/.test('abc'); // true
/a[\s\S]c/.test('a#c'); // true
/a[\s\S]c/.test('a\nc'); // true
Python 使用範例
import re
bool(re.search('a[\s\S]c', 'abc')) # True
bool(re.search('a[\s\S]c', 'a#c')) # True
bool(re.search('a[\s\S]c', 'a\nc')) # True
PHP 使用範例
preg_match('/a[\s\S]c/', 'abc'); // 1
preg_match('/a[\s\S]c/', 'a#c'); // 1
preg_match('/a[\s\S]c/', "a\nc"); // 1
Ruby 使用範例
/a[\s\S]c/ =~ 'abc' # 0
/a[\s\S]c/ =~ 'a#c' # 0
/a[\s\S]c/ =~ "a\nc" # 0
\w word
\w 用來匹配所有大小寫英文字、阿拉伯數字和底線 _。
\w 意思同等於 [A-Za-z0-9_]。例子:
pattern a\wc 可以用來匹配 "abc", "aGc", "a5c", "a_c" 等字串,但不能匹配 "a c", "a#c", "a\nc" 等字串。
JavaScript 使用範例
/a\wc/.test('abc'); // true
/a\wc/.test('a#c'); // false
/a\wc/.test('a\nc'); // false
Python 使用範例
import re
bool(re.search('a\wc', 'abc')) # True
bool(re.search('a\wc', 'a#c')) # False
bool(re.search('a\wc', 'a\nc')) # False
PHP 使用範例
preg_match('/a\wc/', 'abc'); // 1
preg_match('/a\wc/', 'a#c'); // 0
preg_match('/a\wc/', "a\nc"); // 0
Ruby 使用範例
/a\wc/ =~ 'abc' # 0
/a\wc/ =~ 'a#c' # nil
/a\wc/ =~ "a\nc" # nil
\W not word
\W 用來匹配 \w 以外的所有字。
\W 意思同等於 [^A-Za-z0-9_]。例子:
a\Wc 可以用來匹配 "a c", "a#c", "a\nc" 等字串,但不能匹配 "abc", "aGc", "a5c", "a_c" 等字串。
JavaScript 使用範例
/a\Wc/.test('abc'); // false
/a\Wc/.test('a#c'); // true
/a\Wc/.test('a\nc'); // true
Python 使用範例
import re
bool(re.search('a\Wc', 'abc')) # False
bool(re.search('a\Wc', 'a#c')) # True
bool(re.search('a\Wc', 'a\nc')) # True
PHP 使用範例
preg_match('/a.c/', 'abc'); // 1
preg_match('/a.c/', 'a#c'); // 1
preg_match('/a.c/', "a\nc"); // 0
Ruby 使用範例
/a.c/ =~ 'abc' # 0
/a.c/ =~ 'a#c' # 0
/a.c/ =~ "a\nc" # nil
\d digit
\d 用來匹配所有阿拉伯數字 0-9。
\d 意思同等於 [0-9]。例子:
a\dc 可以用來匹配 "a1c", "a5c" 等字串,但不能匹配 "abc", "aGc", "a_c", "a c", "a#c", "a\nc" 等字串。
JavaScript 使用範例
/a\dc/.test('abc'); // false
/a\dc/.test('a5c'); // true
/a\dc/.test('a\nc'); // false
Python 使用範例
import re
bool(re.search('a\dc', 'abc')) # False
bool(re.search('a\dc', 'a5c')) # True
bool(re.search('a\dc', 'a\nc')) # False
PHP 使用範例
preg_match('/a\dc/', 'abc'); // 0
preg_match('/a\dc/', 'a5c'); // 1
preg_match('/a\dc/', "a\nc"); // 0
Ruby 使用範例
/a\dc/ =~ 'abc' # nil
/a\dc/ =~ 'a5c' # 0
/a\dc/ =~ "a\nc" # nil
\D not digit
\D 用來匹配 \d 以外的所有字。
\D 意思同等於 [^0-9]。例子:
a\Dc 可以用來匹配 "abc", "aGc", "a_c", "a c", "a#c", "a\nc" 等字串,但不能匹配 "a1c", "a5c" 等字串。
JavaScript 使用範例
/a\Dc/.test('abc'); // true
/a\Dc/.test('a5c'); // false
/a\Dc/.test('a\nc'); // true
Python 使用範例
import re
bool(re.search('a\Dc', 'abc')) # True
bool(re.search('a\Dc', 'a5c')) # False
bool(re.search('a\Dc', 'a\nc')) # True
PHP 使用範例
preg_match('/a\Dc/', 'abc'); // 1
preg_match('/a\Dc/', 'a5c'); // 0
preg_match('/a\Dc/', "a\nc"); // 1
Ruby 使用範例
/a\Dc/ =~ 'abc' # 0
/a\Dc/ =~ 'a5c' # nil
/a\Dc/ =~ "a\nc" # 0
\s whitespace
\s 用來匹配所有的空白字元 (whitespace) - 空白 (space)、tab 和換行符號 \r \n。
例子:
a\sc 可以用來匹配 "a c", "a\nc" 等字串,但不能匹配 "abc", "aGc", "a_c", "a#c", "a1c", "a5c" 等字串。
JavaScript 使用範例
/a\sc/.test('a c'); // true
/a\sc/.test('a5c'); // false
/a\sc/.test('a\nc'); // true
Python 使用範例
import re
bool(re.search('a\sc', 'a c')) # True
bool(re.search('a\sc', 'a5c')) # False
bool(re.search('a\sc', 'a\nc')) # True
PHP 使用範例
preg_match('/a\sc/', 'a c'); // 1
preg_match('/a\sc/', 'a5c'); // 0
preg_match('/a\sc/', "a\nc"); // 1
Ruby 使用範例
/a\sc/ =~ 'a c' # 0
/a\sc/ =~ 'a5c' # nil
/a\sc/ =~ "a\nc" # 0
\S not whitespace
\S 用來匹配 \s 以外的所有字。
例子:
a\Sc 可以用來匹配 "abc", "aGc", "a_c", "a#c", "a1c", "a5c" 等字串,但不能匹配 "a c", "a\nc" 等字串。
JavaScript 使用範例
/a\Sc/.test('a c'); // false
/a\Sc/.test('a5c'); // true
/a\Sc/.test('a\nc'); // false
Python 使用範例
import re
bool(re.search('a\Sc', 'a c')) # False
bool(re.search('a\Sc', 'a5c')) # True
bool(re.search('a\Sc', 'a\nc')) # False
PHP 使用範例
preg_match('/a\Sc/', 'a c'); // 0
preg_match('/a\Sc/', 'a5c'); // 1
preg_match('/a\Sc/', "a\nc"); // 0
Ruby 使用範例
/a\Sc/ =~ 'a c' # nil
/a\Sc/ =~ 'a5c' # 0
/a\Sc/ =~ "a\nc" # nil
[ ] character set
[ ] 中括號用來表示一個字元集合 (character set),整個中括號代表一個字元,裡面的內容就是這個字元的所有可能。
例子:
a[abcde123]c 可以用來匹配 "abc", "a1c" 等字串,但不能匹配 "aGc", "a_c", "a#c", "a5c", "a c", "a\nc" 等字串。
如果 [ ] 中有包含 ] 字元,你需要用反斜線 \ 來跳脫 (escape) 這一個特殊字元。
例子:
a[\]]c 可以用來匹配 "a]c" 字串。
JavaScript 使用範例
/a[abcde123]c/.test('abc'); // true
/a[abcde123]c/.test('a#c'); // false
/a[abcde123]c/.test('a_c'); // false
Python 使用範例
import re
bool(re.search('a[abcde123]c', 'abc')) # True
bool(re.search('a[abcde123]c', 'a#c')) # False
bool(re.search('a[abcde123]c', 'a_c')) # False
PHP 使用範例
preg_match('/a[abcde123]c/', 'abc'); // 1
preg_match('/a[abcde123]c/', 'a#c'); // 0
preg_match('/a[abcde123]c/', "a_c"); // 0
Ruby 使用範例
/a[abcde123]c/ =~ 'abc' # 0
/a[abcde123]c/ =~ 'a#c' # nil
/a[abcde123]c/ =~ "a_c" # nil
[^ ] negated set
[^ ] 是 [ ] 的相反,用來匹配不在字元集合裡面的字元。
例子:
a[^abcde123]c 可以用來匹配 "aGc", "a_c", "a#c", "a5c", "a c", "a\nc" 等字串,但不能匹配 "abc", "a1c" 等字串。
JavaScript 使用範例
/a[^abcde123]c/.test('abc'); // false
/a[^abcde123]c/.test('a#c'); // true
/a[^abcde123]c/.test('a_c'); // true
Python 使用範例
import re
bool(re.search('a[^abcde123]c', 'abc')) # False
bool(re.search('a[^abcde123]c', 'a#c')) # True
bool(re.search('a[^abcde123]c', 'a_c')) # True
PHP 使用範例
preg_match('/a[^abcde123]c/', 'abc'); // 0
preg_match('/a[^abcde123]c/', 'a#c'); // 1
preg_match('/a[^abcde123]c/', "a_c"); // 1
Ruby 使用範例
/a[^abcde123]c/ =~ 'abc' # nil
/a[^abcde123]c/ =~ 'a#c' # 0
/a[^abcde123]c/ =~ "a_c" # 0
[A-Z] range
[ ] (或 [^ ]) 中還可以用 - 符號來表示連續 (range) 的好幾個字元。
例子:
a[a-zC-F3-7]c 其中 a-z 表示 a 到 z 所有的小寫英文字、C-F 表示大寫的 C 到 F (C D E F)、3-7 表示數字 3 到 7 (3 4 5 6 7),可以用來匹配 "abc", "a5c" 等字串,但不能匹配 "a1c", "aGc", "a_c", "a#c", "a c", "a\nc" 等字串。
JavaScript 使用範例
/a[a-zC-F3-7]c/.test('abc'); // true
/a[a-zC-F3-7]c/.test('a5c'); // true
/a[a-zC-F3-7]c/.test('aGc'); // false
Python 使用範例
import re
bool(re.search('a[a-zC-F3-7]c', 'abc')) # True
bool(re.search('a[a-zC-F3-7]c', 'a5c')) # True
bool(re.search('a[a-zC-F3-7]c', 'aGc')) # False
PHP 使用範例
preg_match('/a[a-zC-F3-7]c/', 'abc'); // 1
preg_match('/a[a-zC-F3-7]c/', 'a5c'); // 1
preg_match('/a[a-zC-F3-7]c/', 'aGc'); // 0
Ruby 使用範例
/a[a-zC-F3-7]c/ =~ 'abc' # 0
/a[a-zC-F3-7]c/ =~ 'a5c' # 0
/a[a-zC-F3-7]c/ =~ 'aGc' # nil