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