Java 使用哪个正则表达式引擎?
如果我使用像 RegexBuddy 这样的工具
[a-z&&[^bc]]
Java 中的这种表达方式很好,但在 RegexBuddy 中还没有被理解。
事实上,它报告:
匹配下面列表中的单个字符
[a-z&&[^bc]
- 介于
a
和之间的字符z
:a-z
- 人物之一
&[^bc
:&&[^bc
]
从字面上匹配字符:]
但我想匹配一个字符之间a
并z
与之相交的字符不是b
或c
Java 使用哪个正则表达式引擎?
如果我使用像 RegexBuddy 这样的工具
[a-z&&[^bc]]
Java 中的这种表达方式很好,但在 RegexBuddy 中还没有被理解。
事实上,它报告:
匹配下面列表中的单个字符
[a-z&&[^bc]
- 介于
a
和之间的字符z
:a-z
- 人物之一
&[^bc
:&&[^bc
]
从字面上匹配字符:]
但我想匹配一个字符之间a
并z
与之相交的字符不是b
或c
像大多数正则表达式风格一样,java.util.regex.Pattern
具有自己的特定功能,其语法可能与其他风格不完全兼容;这包括字符类联合、交集和减法:
[a-d[m-p]]
:a
通过d
,或m
通过p
:([a-dm-p]
联合)[a-z&&[def]]
:d
,e
, orf
(intersection)[a-z&&[^bc]]
:a
通过z
, 除了b
和c
:[ad-z]
(减法)
Java 正则表达式最重要的“警告”是matches
尝试将模式与整个字符串进行匹配。这在大多数引擎中是非典型的,有时可能会造成混乱。
减法允许您将例如 Java 中的“所有辅音”定义为[a-z&&[^aeiou]]
.
此语法特定于 Java。在 XML Schema、.NET、JGSoft 和 RegexBuddy 中,它是[a-z-[aeiou]]
. 其他口味可能根本不支持此功能。
Java 使用自己的正则表达式引擎,其行为在Pattern类中定义。
您可以使用Eclipse 插件或在线测试它。
RegexBuddy 还不支持 Java 正则表达式特有的字符类联合、交集和减法语法。这是 RegexBuddy 尚不支持的 Java 正则表达式语法的唯一部分。我们计划在 RegexBuddy 的未来版本中实现这一点。这被推迟的原因是因为没有其他正则表达式支持这种语法。
PS:如果您对 RegexBuddy 有特别的疑问,请在您的问题中添加“regexbuddy”标签。然后问题会自动出现在我的 RSS 阅读器中。我不遵循“正则表达式”标签,因为太多问题使用该标签,而且大多数问题在我看到它们时已经回答。