非捕获组是多余的吗?

问题描述 投票:5回答:1

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

是以下正则表达式:

(?:wo)?men

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

(wo)?men
java regex capture-group
1个回答
8
投票

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

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

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

此外,它只是makes our matches cleaner

您可以使用非捕获组来保留组织或分组权益,但不会产生捕获的开销。

重新考虑现有正则表达式以将捕获转换为非捕获组似乎不是一个好主意,因为它需要付出太多努力。

© www.soinside.com 2019 - 2024. All rights reserved.