2

我想知道java支持哪些正则表达式标准。我所说的标准是指它是否支持 IEEE POSIX BRE、ERE 和 SRE。

任何人都可以给出任何想法。

提前感谢您的回复。

4

1 回答 1

0

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 中,\1through\9总是被解释为反向引用;如果至少存在那么多子表达式,则将大于 9 的反斜杠转义数字视为反向引用,否则如果可能,将其解释为八进制转义。在此类中,八进制转义必须始终以零开头。在这个类中,\1 通过\9总是被解释为反向引用,并且如果在正则表达式中的那个点至少存在那么多子表达式,则较大的数字被接受为反向引用,否则解析器将删除数字直到数字更小或相等到现有组数或为一位数。

  • Perl 使用该g标志来请求一个匹配,该匹配从上一个匹配中断的地方继续。该功能由 Matcher类隐式提供: find 方法的重复调用将在最后一个匹配停止的地方恢复,除非匹配器被重置。

  • 在 Perl 中,表达式顶层的嵌入标志会影响整个表达式。在这个类中,嵌入的标志总是在它们出现的地方生效,无论它们是在顶层还是在一个组内;在后一种情况下,标志在组的末尾恢复,就像在 Perl 中一样。

于 2013-05-24T15:56:44.140 回答