正規表示式
JSPCRE
//
比對結果
無比對字元類
| 語法 | 含義 | JS | PCRE | Python | Java |
|---|---|---|---|---|---|
| \d | 數字 [0-9] | ✅ | ✅ | ✅ | ✅ |
| \D | 非數字 [^0-9] | ✅ | ✅ | ✅ | ✅ |
| \w | 單字字元 [a-zA-Z0-9_] | ✅ | ✅ | ✅ | ✅ |
| \W | 非單字字元 | ✅ | ✅ | ✅ | ✅ |
| \s | 空白字元 | ✅ | ✅ | ✅ | ✅ |
| \S | 非空白字元 | ✅ | ✅ | ✅ | ✅ |
| . | 任意字元(除換行) | ✅ | ✅ | ✅ | ✅ |
| [abc] | 字元類(比對 a/b/c) | ✅ | ✅ | ✅ | ✅ |
| [^abc] | 排除字元類(非 a/b/c) | ✅ | ✅ | ✅ | ✅ |
| [[:alpha:]] | POSIX 字母類 | ❌ | ✅ | ✅ | ❌ |
| [[:digit:]] | POSIX 數字類 | ❌ | ✅ | ✅ | ❌ |
| \p{L} | Unicode 字母 | ✅ | ✅ | ⚠️ | ✅ |
| \p{N} | Unicode 數字 | ✅ | ✅ | ⚠️ | ✅ |
| \X | Unicode 擴展字形簇 | ❌ | ✅ | ❌ | ❌ |
量詞
| 語法 | 含義 | JS | PCRE | Python | Java |
|---|---|---|---|---|---|
| * | 零次或多次 | ✅ | ✅ | ✅ | ✅ |
| + | 一次或多次 | ✅ | ✅ | ✅ | ✅ |
| ? | 零次或一次 | ✅ | ✅ | ✅ | ✅ |
| {n} | 恰好 n 次 | ✅ | ✅ | ✅ | ✅ |
| {n,m} | n 到 m 次 | ✅ | ✅ | ✅ | ✅ |
| *? | 零次或多次(惰性) | ✅ | ✅ | ✅ | ✅ |
| +? | 一次或多次(惰性) | ✅ | ✅ | ✅ | ✅ |
| ?? | 零次或一次(惰性) | ✅ | ✅ | ✅ | ✅ |
| {n,m}? | n 到 m 次(惰性) | ✅ | ✅ | ✅ | ✅ |
| *+ | 零次或多次(佔有) | ❌ | ✅ | ❌ | ✅ |
| ++ | 一次或多次(佔有) | ❌ | ✅ | ❌ | ✅ |
| ?+ | 零次或一次(佔有) | ❌ | ✅ | ❌ | ✅ |
錨點
| 語法 | 含義 | JS | PCRE | Python | Java |
|---|---|---|---|---|---|
| ^ | 字串開頭(多行模式下行首) | ✅ | ✅ | ✅ | ✅ |
| $ | 字串末尾(多行模式下行尾) | ✅ | ✅ | ✅ | ✅ |
| \b | 單字邊界 | ✅ | ✅ | ✅ | ✅ |
| \B | 非單字邊界 | ✅ | ✅ | ✅ | ✅ |
| \A | 字串絕對開頭 | ❌ | ✅ | ✅ | ✅ |
| \Z | 字串絕對末尾(換行前) | ❌ | ✅ | ✅ | ✅ |
| \z | 字串最末尾(換行後) | ❌ | ✅ | ✅ | ❌ |
| \G | 上一比對結束位置 | ❌ | ✅ | ✅ | ✅ |
群組與參照
| 語法 | 含義 | JS | PCRE | Python | Java |
|---|---|---|---|---|---|
| (...) | 擷取群組 | ✅ | ✅ | ✅ | ✅ |
| (?:...) | 非擷取群組 | ✅ | ✅ | ✅ | ✅ |
| (?<name>...) | 命名擷取群組(JS/Java 風格) | ✅ | ⚠️ | ✅ | ✅ |
| (?P<name>...) | 命名擷取群組(Python 風格) | ❌ | ✅ | ✅ | ❌ |
| \1 | 反向參照第 N 群組 | ✅ | ✅ | ✅ | ✅ |
| $1 | 取代中參照第 N 群組 | ✅ | ❌ | ❌ | ✅ |
| \k<name> | 命名反向參照 | ✅ | ✅ | ✅ | ✅ |
| (?|...) | 分支重設群組 | ❌ | ✅ | ❌ | ❌ |
| (?>...) | 原子群組(不回溯) | ❌ | ✅ | ❌ | ✅ |
環視
| 語法 | 含義 | JS | PCRE | Python | Java |
|---|---|---|---|---|---|
| (?=...) | 正向前瞻 | ✅ | ✅ | ✅ | ✅ |
| (?!...) | 負向前瞻 | ✅ | ✅ | ✅ | ✅ |
| (?<=...) | 正往回顧 | ✅ | ✅ | ✅ | ✅ |
| (?<!...) | 負往回顧 | ✅ | ✅ | ✅ | ✅ |
修飾符
| 語法 | 含義 | JS | PCRE | Python | Java |
|---|---|---|---|---|---|
| (?i) | 不區分大小寫 | ✅ | ✅ | ✅ | ✅ |
| (?-i) | 區分大小寫 | ❌ | ✅ | ❌ | ⚠️ |
| (?m) | 多行模式(^/$ 比對行首行尾) | ✅ | ✅ | ✅ | ✅ |
| (?s) | 點號通配模式(. 比對換行) | ✅ | ✅ | ⚠️ | ✅ |
| (?x) | 忽略空白和 # 註解 | ❌ | ✅ | ✅ | ✅ |
| (?i:...) | 內聯不區分大小寫 | ✅ | ✅ | ❌ | ✅ |
PCRE 進階
| 語法 | 含義 | JS | PCRE | Python | Java |
|---|---|---|---|---|---|
| \K | 重設比對起點 | ❌ | ✅ | ❌ | ❌ |
| (*SKIP) | 跳過目前比對 | ❌ | ✅ | ❌ | ❌ |
| (*FAIL) | 強制比對失敗 | ❌ | ✅ | ❌ | ❌ |
| (?(cond)yes|no) | 條件運算式 | ❌ | ✅ | ❌ | ❌ |
| (?R) | 遞迴比對整個模式 | ❌ | ✅ | ❌ | ❌ |
| (?1) | 副程式呼叫第 1 群組 | ❌ | ✅ | ❌ | ❌ |