【问题标题】:Character class subtraction, converting from Java syntax to RegexBuddy字符类减法,从 Java 语法转换为 RegexBuddy
【发布时间】:2011-03-13 05:10:22
【问题描述】:

Java 使用哪种正则表达式引擎?

如果我使用像 RegexBuddy 这样的工具

[a-z&&[^bc]]

Java 中的这种表达方式很好,但在 RegexBuddy 中却没有被理解。

事实上它报告:

匹配中存在的单个字符 下面的列表[a-z&&[^bc]

  • az 范围内的字符:a-z
  • &[^bc 中的一个字符:&&[^bc
  • 从字面上匹配字符]]

但我想匹配az 之间的字符,该字符与不是bc 的字符相交

【问题讨论】:

    标签: java regex regexbuddy character-class


    【解决方案1】:

    像大多数正则表达式一样,java.util.regex.Pattern 具有自己的特定功能,其语法可能与其他功能不完全兼容;这包括字符类联合、交集和减法:

    • [a-d[m-p]]ad,或 mp[a-dm-p] (联合)
    • [a-z&&[def]] : def (交叉路口)
    • [a-z&&[^bc]] : azbc 除外:[ad-z] (减法)

    Java 正则表达式最重要的“警告”是matches 尝试将模式与整个 字符串进行匹配。这在大多数引擎中是非典型的,有时可能会造成混乱。

    另见


    关于字符类减法

    减法允许您将例如 Java 中的“所有辅音”定义为 [a-z&&[^aeiou]]

    此语法特定于 Java。在 XML Schema、.NET、JGSoft 和 RegexBuddy 中,它是 [a-z-[aeiou]]。其他口味可能根本不支持此功能。

    参考文献

    相关问题

    【讨论】:

    • 我无法测试这个,因为我没有 RegexBuddy,但 regular-expressions.info 声称 JGSoft 支持与 .NET 相同的减法语法,并且 RegexBuddy v3+ 扩展了 JGSoft(或类似的东西),所以如果有人可以确认 [a-z-[aeiou]] 减法语法确实适用于 RegexBuddy,我可以将其添加到我的答案中。
    • JGSoft 风格是在 EditPadPro 和 PowerGrep 中使用的,它确实支持 .NET 和 XML Schema 使用的减法语法(经过测试)。 RegexBuddy 也使用它,在一定程度上也可以翻译成其他口味。但是,从 v3.4.2 开始,RegexBuddy 不理解 Java 的 && 交集语法,即使您告诉它您的目标是 Java 风格。
    • @Alan Moore:RegexBuddy 和 regular-expressions.info 的遗漏表明 Jan 可能不知道这种 Java 特定的语法。无论如何,我已经主动通过电子邮件向他发送了这些问题。谁知道呢,如果他觉得慷慨的话,他甚至可能会给我一份免费的 RegexBuddy =)
    • 我想说减法语法也符合 Unicode 正则表达式标准 (UTS #18),但距离我上次查看该标准已经有一段时间了。它变成了怪物! unicode.org/reports/tr18/#Subtraction_and_Intersection
    【解决方案2】:

    Java 使用自己的正则表达式引擎,其行为在 Pattern 类中定义。

    您可以使用Eclipse pluginonline 对其进行测试。

    【讨论】:

    • 感谢 Aaron 添加的链接!
    【解决方案3】:

    RegexBuddy 还不支持 Java 正则表达式特有的字符类联合、交集和减法语法。这是 RegexBuddy 尚不支持的 Java 正则表达式语法的唯一部分。我们计划在 RegexBuddy 的未来版本中实现这一点。推迟的原因是没有其他正则表达式支持这种语法。

    P.S.:如果您对 RegexBuddy 有特别的疑问,请在您的问题中添加“regexbuddy”标签。然后问题会自动出现在我的 RSS 阅读器中。我不使用“正则表达式”标签,因为太多问题使用该标签,而且大多数问题在我看到它们时已经回答了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-15
      • 2016-03-11
      • 2013-11-02
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      相关资源
      最近更新 更多