gpt4 book ai didi

java - 非捕获组是否多余?

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:38 26 4
gpt4 key购买 nike

可选的非捕获组是否多余?

是以下正则表达式:

(?:wo)?men

在语义上等同于以下正则表达式?

(wo)?men

最佳答案

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

非捕获组有时会有所帮助。

  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或需要太多的努力。

关于java - 非捕获组是否多余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31500422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com