Java使用哪种正则表达式引擎?
如果我使用
,请使用像RegexBuddy这样的工具[a-z&&[^bc]]
Java中的表达式很好,但在RegexBuddy中它还没有被理解。
事实上,它报道:
匹配中的单个字符
下面的列表[a-z&&[^bc]
a
和z
之间的字符:a-z
- 其中一个字符
&[^bc
:&&[^bc
- 按字面匹配字符
]
:]
但我希望匹配a
和z
之间与非b
或c
答案 0 :(得分:19)
与大多数正则表达式一样,java.util.regex.Pattern
有自己的特定功能,语法可能与其他语法不完全兼容;这包括字符类联合,交集和减法:
[a-d[m-p]]
:a
到d
,或m
到p
:[a-dm-p]
(联盟) < / LI>[a-z&&[def]]
:d
,e
或f
(十字路口)[a-z&&[^bc]]
:a
到z
,b
和c
除外:[ad-z]
(扣除)
Java正则表达式最重要的“警告”是matches
尝试将模式与整个字符串进行匹配。这对大多数引擎来说都是非典型的,有时会引起混淆。
减法允许您将Java中的“所有辅音”定义为[a-z&&[^aeiou]]
。
此语法特定于Java。在XML Schema,.NET,JGSoft和RegexBuddy中,它是[a-z-[aeiou]]
。其他口味可能根本不支持此功能。
答案 1 :(得分:4)
Java使用自己的正则表达式引擎,该行为在Pattern类中定义。
您可以使用Eclipse plugin或online进行测试。
答案 2 :(得分:2)
RegexBuddy尚不支持Java正则表达式风格独有的字符类并集,交集和减法语法。这是RegexBuddy尚不支持的Java正则表达式语法的唯一部分。我们计划在RegexBuddy的未来版本中实现这一点。这被推迟的原因是因为没有其他正则表达式支持这种语法。
P.S。:如果您对RegexBuddy有疑问,请在您的问题中添加“regexbuddy”标签。然后问题会自动显示在我的RSS阅读器中。我不遵循“正则表达式”标签,因为有太多问题使用该标签,而且大多数问题已经在我看到它们时得到解答。