字符类减法,从 Java 语法转换为正则表达式Buddy

2022-09-04 07:30:18

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

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

[a-z&&[^bc]]

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

事实上,它报告说:

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

  • 介于 和 之间的字符:a-zaz
  • 其中一个字符: &&[^bc&[^bc
  • 从字面上匹配字符:]]

但我想匹配一个字符之间的字符,并与不是或的字符相交azbc


答案 1

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

  • [a-d[m-p]]:通过 ,或通过 :(联合)admp[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]]

引用

相关问题


答案 2

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

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