有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java非捕获组是否冗余?

可选的非捕获组是否冗余

以下是正则表达式:

(?:wo)?men

语义上等同于下面的正则表达式

(wo)?men

共 (1) 个答案

  1. # 1 楼答案

    您的(?:wo)?men(wo)?men在语义上是等价的,但在技术上是不同的,即第一个使用非捕获组,另一个使用捕获组。因此,问题是当我们有捕获组时,为什么要使用非捕获组

    有时,非caprturing团体会提供帮助

    1. 避免过多的反向引用(请记住,有时使用高于9的反向引用是很困难的)
    2. 为了避免99个带编号的反向引用限制的问题(通过减少带编号的捕获组的数量)(来源:Regular-expressions.info大多数正则表达式风格最多支持99个捕获组和两位数的反向引用。
      注意这与Java正则表达式引擎无关,也与PHP或。NET正则表达式引擎
    3. 由于将捕获存储在堆栈中而导致的lessen the overhead
    4. 我们可以在现有正则表达式中添加更多分组,而不会破坏捕获分组的顺序

    此外,它只是makes our matches cleaner

    You can use a non-capturing group to retain the organisational or grouping benefits but without the overhead of capturing.

    重新分解现有正则表达式以将捕获组转换为非捕获组似乎不是一个好主意,因为它需要may ruin the code或太多的工作