非捕获组是冗余的吗?

2024-09-27 21:27:41 发布

您现在位置:Python中文网/ 问答频道 /正文

可选的非捕获组是否冗余?在

是以下正则表达式:

(?:wo)?men

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

^{pr2}$

Tags: 等价women语义上pr2
1条回答
网友
1楼 · 发布于 2024-09-27 21:27:41

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

非专业团队有时也有帮助。在

  1. 避免过多的反向引用(记住,有时很难使用大于9的反向引用)
  2. 为了避免99个带编号的backreferences限制的问题(通过减少带编号的捕获组的数量)(source:Regular-expressions.info:大多数regex风格最多支持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或需要太多的精力。在

相关问题 更多 >

    热门问题