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