我想知道java支持哪些正则表达式标准。我所说的标准是指它是否支持 IEEE POSIX BRE、ERE 和 SRE。
任何人都可以给出任何想法。
提前感谢您的回复。
Oracle 的这份文档包含有关 Java SE 7 中支持的正则表达式结构的大量信息,但没有提及支持哪些标准:
与 Perl 5 的比较
Pattern 引擎使用 Perl 5 中的有序交替执行传统的基于 NFA 的匹配。
此类不支持的 Perl 构造:
- 预定义字符类(Unicode 字符)
\h
水平空白\H
非水平空白\v
垂直空白\V
非垂直空格\R
任何 Unicode 换行序列\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
\X
匹配 Unicode 扩展字素簇- 反向引用构造,
\g{n}
用于 nthcapturing 组和 \g{name} 用于命名捕获组。- 命名字符构造,
\N{name}
用于 Unicode 字符的名称。- 条件构造
(?(condition)X)
和(?(condition)X|Y)
,- 嵌入式代码构造
(?{code})
和(??{code})
,- 嵌入式注释语法
(?#comment)
,以及- 预处理操作
\l
、\u
、\L
和\U
。此类支持但 Perl 不支持的构造:
- 如上所述的字符类联合和交集。
与 Perl 的显着差异:
在 Perl 中,
\1
through\9
总是被解释为反向引用;如果至少存在那么多子表达式,则将大于 9 的反斜杠转义数字视为反向引用,否则如果可能,将其解释为八进制转义。在此类中,八进制转义必须始终以零开头。在这个类中,\1
通过\9
总是被解释为反向引用,并且如果在正则表达式中的那个点至少存在那么多子表达式,则较大的数字被接受为反向引用,否则解析器将删除数字直到数字更小或相等到现有组数或为一位数。Perl 使用该
g
标志来请求一个匹配,该匹配从上一个匹配中断的地方继续。该功能由Matcher
类隐式提供: find 方法的重复调用将在最后一个匹配停止的地方恢复,除非匹配器被重置。在 Perl 中,表达式顶层的嵌入标志会影响整个表达式。在这个类中,嵌入的标志总是在它们出现的地方生效,无论它们是在顶层还是在一个组内;在后一种情况下,标志在组的末尾恢复,就像在 Perl 中一样。