13

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

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

[a-z&&[^bc]]

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

事实上,它报告:

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

  • 介于a和之间的字符za-z
  • 人物之一&[^bc&&[^bc
  • ]从字面上匹配字符:]

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

4

3 回答 3

21

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

  • [a-d[m-p]]a通过d,或m通过p:([a-dm-p] 联合)
  • [a-z&&[def]]: d, e, or f (intersection)
  • [a-z&&[^bc]]:a通过z, 除了bc: [ad-z] (减法)

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

也可以看看


关于字符类减法

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

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

参考

相关问题

于 2010-07-08T08:16:23.590 回答
4

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

您可以使用Eclipse 插件在线测试它。

于 2010-07-08T08:12:26.083 回答
2

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

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

于 2010-07-09T02:20:55.737 回答