本網站的更多內容 |
簡介 |
正規表示式快速入門 |
正規表示式教學 |
替換字串教學 |
應用程式和語言 |
正規表示式範例 |
正規表示式參考 |
替換字串參考 |
書籍評論 |
可列印 PDF |
關於本網站 |
RSS 饋送和部落格 |
由於某些字元類別經常使用,因此提供了一系列簡寫字元類別。 \d 是 [0-9] 的簡寫。在支援 Unicode 的大多數版本中,\d 包含所有字碼,來自所有字碼集。值得注意的例外是 Java、JavaScript 和 PCRE。這些 Unicode 版本僅使用 \d 比對 ASCII 字碼。
\w 代表「字元」。它總是符合 ASCII 字元 [A-Za-z0-9_]。請注意底線和數字的包含。在支援 Unicode 的大多數版本中,\w 包含許多其他腳本的字元。關於實際包含哪些字元,有很多不一致的地方。一般來說,字母和數字腳本的字母和數字會包含在內。底線以外的連接標點符號和非數字的數字符號可能會包含或不包含。 XML 架構 和 XPath 甚至包含 \w 中的所有符號。同樣地,Java、JavaScript 和 PCRE 只會以 \w 符合 ASCII 字元。
\s 代表「空白字元」。同樣地,這實際上包含哪些字元取決於 regex 版本。在本教學課程中討論的所有版本中,它包含 [ \t\r\n\f]。也就是說:\s 符合空格、標籤、回車、換行或換頁。大多數版本也包含垂直標籤,但 Perl(5.18 版以前)和 PCRE(8.34 版以前)是值得注意的例外。在支援 Unicode 的版本中,\s 通常包含 Unicode「分隔符」類別中的所有字元。 Java 和 PCRE 再次成為例外。但 JavaScript 的確以 \s 符合所有 Unicode 空白。
縮寫字元類別可以在方括號內外使用。 \s\d 符合空白字元後接數字。 [\s\d] 符合單一字元,該字元為空白或數字。應用於 1 + 2 = 3 時,前者 regex 符合 2(空格二),而後者符合 1(一)。 [\da-fA-F] 符合十六進位數字,如果您的版本只以 \d 符合 ASCII 字元,則等於 [0-9a-fA-F]。
上述三個簡寫也都有否定版本。 \D 等同於 [^\d],\W 是 [^\w] 的簡寫,而 \S 等同於 [^\s]。
在方括號內使用否定簡寫時要小心。 [\D\S] 不等於 [^\d\s]。後者會配對任何既不是數字也不是空白字元字元。它會配對 x,但不會配對 8。然而,前者會配對任何既不是數字或不是空白字元的字元。由於所有數字都不是空白字元,而所有空白字元都不是數字,因此 [\D\S] 會配對任何字元;數字、空白字元或其他。
雖然對 \d、\s 和 \w 的支援相當普遍,但有些 regex 風格支援額外的簡寫字元類別。 Perl 5.10 引入了 \h 和 \v。 \h 符合水平空白,其中包括 tab 和 Unicode 類別「空白分隔符號」中的所有字元。它等於 [\t\p{Zs}]。 \v 符合「垂直空白」,其中包括 Unicode 標準中視為換行符號的所有字元。它等於 [\n\cK\f\r\x85\x{2028}\x{2029}]。
PCRE 從 7.2 版開始也支援 \h 和 \v。 PHP 從 5.2.2 版開始支援,Java 從 8 版開始支援,JGsoft 引擎 從 2 版開始支援。
如果您的風格支援 \h 和 \v,那麼當您只想符合一種空白類型時,您絕對應該使用它們,而不是 \s。使用 \h 而不是 \s 來符合空白和 tab,可以確保您的 regex 符合不會意外溢出到下一行。
在許多其他 regex 風格中,\v 只符合 垂直 tab 字元。Perl、PCRE 和 PHP 從未支援過這一點,因此它們可以自由地賦予 \v 不同的意義。Java 4 到 7 和 JGsoft V1 確實使用 \v 來只符合垂直 tab。Java 8 和 JGsoft V2 還是改變了這個代碼的意義。垂直 tab 也是一個垂直空白字元。為了避免混淆,上述段落使用 \cK 來表示垂直 tab。
Boost 支援 \h,從 1.42 版開始。Boost 1.42 及更新版本支援 \v 作為僅在字元類別之外的簡寫。 [\v] 在 Boost 中只比對垂直定位標籤。
Ruby 1.9 及更新版本有自己的 \h 版本。它比對單一十六進位數字,就像 [0-9a-fA-F] 一樣。 \v 在 Ruby 中是垂直定位標籤。
XML Schema、XPath 和 JGsoft V2 正規表示式支援其他四個其他正規表示式樣式不支援的簡寫。 \i 比對任何可能為 XML 名稱第一個字元的字元。 \c 比對任何可能出現在 XML 名稱第一個字元後的字元。 \I 和 \C 分別為否定的簡寫。請注意, \c 簡寫語法與許多其他正規表示式樣式中使用的 控制字元 語法衝突。
您可以使用方括號表示法在字元類別內外使用這四個簡寫。它們對於驗證 XML 參照和 XML schema 中的值非常有用。正規表示式 \i\c* 比對 XML 名稱,例如 xml:schema。
The regex <\i\c*\s*> matches an opening XML tag without any attributes. </\i\c*\s*> matches any closing tag. <\i\c*(\s+\i\c*\s*=\s*("[^"]*"|'[^']*'))*\s*> matches an opening tag with any number of attributes. Putting it all together, <(\i\c*(\s+\i\c*\s*=\s*("[^"]*"|'[^']*'))*|/\i\c*)\s*> matches either an opening tag with attributes or a closing tag.
本教學課程中討論的其他 regex 風味不支援 XML 字元類別。如果你的 XML 檔案是純 ASCII,你可以使用 [_:A-Za-z] 代表 \i,以及 [-._:A-Za-z0-9] 代表 \c。如果你想要允許 XML 標準允許的所有 Unicode 字元,那麼你最後會得到一些相當長的 regex。你會使用以下內容取代 \i
[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]
你會使用以下內容取代 \c
[-.0-9:A-Z_a-z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]
| 快速入門 | 教學課程 | 工具和語言 | 範例 | 參考 | 書籍評論 |
| 簡介 | 目錄 | 特殊字元 | 非列印字元 | Regex 引擎內部 | 字元類別 | 字元類別減法 | 字元類別交集 | 簡寫字元類別 | 點 | 錨點 | 字詞邊界 | 交替 | 選用項目 | 重複 | 群組和擷取 | 反向參照 | 反向參照,第 2 部分 | 命名群組 | 相對反向參照 | 分支重設群組 | 自由間距和註解 | Unicode | 模式修改器 | 原子群組 | 佔有型量詞 | 前瞻和後顧 | 前瞻和後顧,第 2 部分 | 將文字保留在比對之外 | 條件式 | 平衡群組 | 遞迴 | 子常式 | 無限遞迴 | 遞迴和量詞 | 遞迴和擷取 | 遞迴和反向參照 | 遞迴和回溯 | POSIX 方括號表示式 | 零長度比對 | 繼續比對 |
頁面網址:https://regular-expressions.dev.org.tw/shorthand.html
頁面最後更新:2021 年 8 月 20 日
網站最後更新:2024 年 3 月 15 日
版權所有 © 2003-2024 Jan Goyvaerts。保留所有權利。