本網站的其他內容 |
簡介 |
正規表示式快速入門 |
正規表示式教學 |
替換字串教學 |
應用程式和語言 |
正規表示式範例 |
正規表示式參考 |
替換字串參考 |
書籍評論 |
可列印 PDF |
關於本網站 |
RSS Feed 和部落格 |
Java、JGsoft V2 和 Ruby 1.9 及更新版本支援字元類別交集。這可以輕鬆配對必須存在於兩個字元組中的任何單一字元。語法為 [類別&&[交集]]。您可以在交集的字元類別中使用完整的字元類別語法。
如果交集類別不需要否定插入符號,則 Java 和 Ruby 允許您省略巢狀方括號:[類別&&交集]。
您無法在 PowerGREP 中省略巢狀方括號。如果您這樣做,PowerGREP 會將連字符號解釋為字面意思。因此在 PowerGREP 中 [class&&intersect] 是僅包含字面意思的字元類別,就像 [clas&inter] 一樣。
字元類別 [a-z&&[^aeiuo]] 符合單一非母音字母。換句話說:它符合單一子音字母。在沒有字元類別 減法 或交集的情況下,執行此項操作的唯一方法是列出所有子音字母:[b-df-hj-np-tv-z]。
字元類別 [\p{Nd}&&[\p{IsThai}]] 符合任何單一泰文數字。 [\p{IsThai}&&[\p{Nd}]] 完全執行相同的動作。
您可以多次交集同一個類別。[0-9&&[0-6&&[4-9]]] 與 [4-6] 相同,因為這些是交集所有三個部分中唯一出現的數字。在 Java 和 Ruby 中,您可以將相同的正規表示式寫成 [0-9&&[0-6]&&[4-9]]、[0-9&&[0-6&&4-9]]、[0-9&&0-6&&[4-9]],或僅 [0-9&&0-6&&4-9]。僅當交集的一部分被否定時,才需要嵌套方括號。
如果您沒有在交集的右半部分周圍使用方括號,那麼不會混淆字元類別的整個剩餘部分就是交集的右半部分。如果您確實使用方括號,您可以寫一些像 [0-9&&[12]56]。在 Ruby 中,這與 [0-9&&1256] 相同。但 Java 有錯誤,導致它將其視為 [0-9&&56],完全忽略嵌套括號。
PowerGREP 不允許在嵌套 ] 之後有任何東西。字元 56 在 [0-9&&[12]56] 中是一個錯誤。這樣它們的含義就沒有歧義了。
您也不應將 && 放在正規表示式的開頭或結尾。Ruby 將 [0-9&&] 和 [&&0-9] 視為與空類別的交集,這完全不符合任何字元。Java 會忽略前導和尾隨的 && 運算子。PowerGREP 將它們視為文字縮寫符號。
字元類別 [^1234&&[3456]] 同時被否定且相交。在 Java 和 PowerGREP 中,否定優先於交集。Java 和 PowerGREP 將此正規表示式讀取為「(非 1234)和 3456」。因此,在 Java 和 PowerGREP 中,此類別與 [56] 相同,並符合數字 5 和 6。在 Ruby 中,交集優先於否定。Ruby 將 [^1234&&3456] 讀取為「非(1234 和 3456)」。因此,在 Ruby 中,此類別與 [^34] 相同,符合除了數字 3 和 4 之外的任何內容。
如果您想要否定交集的右手邊,則必須使用方括號。它們會自動控制優先順序。因此,Java、PowerGREP 和 Ruby 都會將 [1234&&[^3456]] 讀取為「1234 和(非 3456)」。因此,此正規表示式與 [12] 相同。
在本文討論的任何其他正規表示式風味中,字元類別中的縮寫符號沒有特殊含義。縮寫符號只是一個文字,重複它只會增加不必要的重複。所有這些風味都將 [1234&&3456] 視為與 [&123456] 相同。
嚴格來說,這表示字元類別交集語法與大多數其他正規表示法不符。但在實務上沒有差別,因為當你只想加入一個字面上的與號時,在字元類別中使用兩個與號沒有意義。Java、Ruby 和 PowerGREP 仍將單一與號視為字面。
| 快速入門 | 教學 | 工具與語言 | 範例 | 參考 | 書籍評論 |
| 簡介 | 目錄 | 特殊字元 | 非列印字元 | 正規表示法引擎內部 | 字元類別 | 字元類別減法 | 字元類別交集 | 簡寫字元類別 | 點 | 錨點 | 字詞邊界 | 交替 | 可選項目 | 重複 | 群組與擷取 | 反向參照 | 反向參照,第 2 部分 | 命名群組 | 相對反向參照 | 分支重設群組 | 自由間距與註解 | Unicode | 模式修改器 | 原子群組 | 獨佔量詞 | 前瞻與後顧 | 前瞻與後顧,第 2 部分 | 將文字保留在比對之外 | 條件 | 平衡群組 | 遞迴 | 子常式 | 無限遞迴 | 遞迴與量詞 | 遞迴與擷取 | 遞迴與反向參照 | 遞迴與回溯 | POSIX 方括號表示法 | 零長度比對 | 繼續比對 |
頁面網址:https://regular-expressions.dev.org.tw/charclassintersect.html
頁面最後更新:2019 年 11 月 22 日
網站最後更新:2024 年 3 月 15 日
版權所有 © 2003-2024 Jan Goyvaerts。保留所有權利。