本网站上的更多内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式示例 |
正则表达式参考 |
替换字符串参考 |
书评 |
可打印 PDF |
关于本网站 |
RSS 提要和博客 |
Java、JGsoft V2 以及 Ruby 1.9 及更高版本支持字符类交集。它可以轻松匹配必须存在于两组字符中的任何单个字符。其语法为 [类&&[相交]]。您可以在相交的字符类中使用完整的字符类语法。
如果相交的类不需要否定脱字符,则 Java 和 Ruby 允许您省略嵌套方括号:[类&&相交]。
您不能在 PowerGREP 中省略嵌套方括号。如果您这样做,PowerGREP 会将和号解释为文本。因此,在 PowerGREP 中,[类&&相交] 是一个只包含文本的字符类,就像 [类&相交] 一样。
字符类 [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 视为文本。
| 快速入门 | 教程 | 工具和语言 | 示例 | 参考 | 书籍评论 |
| 简介 | 目录 | 特殊字符 | 不可打印字符 | Regex 引擎内部 | 字符类 | 字符类减法 | 字符类交集 | 简写字符类 | 点 | 锚 | 单词边界 | 交替 | 可选项 | 重复 | 分组和捕获 | 反向引用 | 反向引用,第 2 部分 | 命名组 | 相对反向引用 | 分支重置组 | 自由间距和注释 | Unicode | 模式修饰符 | 原子分组 | 独占量词 | 前瞻和后顾 | 前瞻和后顾,第 2 部分 | 将文本保留在匹配项之外 | 条件 | 平衡组 | 递归 | 子例程 | 无限递归 | 递归和量词 | 递归和捕获 | 递归和反向引用 | 递归和回溯 | POSIX 方括号表达式 | 零长度匹配 | 继续匹配 |
页面 URL:https://regexper.cn/charclassintersect.html
页面上次更新时间:2019 年 11 月 22 日
网站上次更新时间:2024 年 3 月 15 日
版权所有 © 2003-2024 Jan Goyvaerts。保留所有权利。