回答
你(?:wo)?men
(wo)?men
和在语义上等价的,但在技术上是不同的,即,首先是使用非捕获和其它捕获组。因此,问题是为什么使用非捕获组,当我们捕捉那些?
非caprturing团体的帮助的时候。
- 为了避免反向引用(记住,这是有时很难使用反向引用高于9)
- 为了避免与99编号的反向引用极限的问题(通过减小编号捕获基团的数目)(源的数量过多:Regular-expressions.info:大多数正则表达式支持多达99个捕获组和两位数的反向引用)
注意这不属于Java正则表达式引擎,也不适用于PHP或.NET正则表达式引擎。 - 致lessen the overhead由将捕获存储在堆栈中导致
- 我们可以在不破坏捕获组顺序的情况下向现有正则表达式添加更多分组。
而且,它只是makes our matches cleaner:
可以使用非捕获组保留组织或分组的好处,但没有捕获的开销。
将现有的正则表达式转换为将捕获转换为非捕获组似乎不是一个好主意,因为它需要付出很多努力。
此评论更多是一个编辑,你不觉得吗? –
请注意,99反向引用限制与Java正则表达式引擎无关。在Java中捕获组的数量存储在*瞬时INT capturingGroupCount *,因此,理论上,可以有大量的反向引用,但有数量可以通过内存限制为上限。 –
我试图找到我们正在讨论的开销多少以及这实际上具有什么影响(Java和Javascript)。 在性能方面使用非捕获组是否有任何实际益处? – runlevel0
- 1. 非捕获组内的捕获组
- 2. 捕获中包含非捕获组?
- 3. 非捕获组不贪婪?
- 4. 命名组中的非捕获组
- 5. preg_match捕捉周期\。在非捕获组
- 6. 捕获组多次
- 7. 如何写的非捕获组的egrep
- 8. 如何匹配的非捕获组
- 9. R中的正则表达式组捕获多个捕获组
- 10. Java LinkedList API不是多余的吗?
- 11. 这些别名是多余的吗?
- 12. 这个循环是多余的吗?
- 13. 这些类属性是多余的吗?
- 14. 这是多维数组内存空间的冗余分配吗?
- 15. 这个非捕获组的目的是什么?
- 16. Groovy - 多重捕获组
- 17. Posix正则表达式非捕获组
- 18. 在python中命名为非捕获组?
- 19. 在MySQL中使用非捕获组REGEXP
- 20. 替换忽略非捕获组
- 21. 我的正则表达式仍然捕捉非捕获组
- 22. C#中的正则表达式如何只替换捕获组而不是非捕获组
- 23. 捕获组VS未捕获组
- 24. 如何捕获同一个捕获组多次?
- 25. 正则非捕捉组
- 26. ASP.NET是否ListViews是多余的?有其他选择吗?
- 27. 捕获OutOfMemoryError是一个坏主意吗?
- 28. 捕获组
- 29. php捕获组
- 30. 捕获组
我认为这将取决于您所使用的正则表达式。 Java的标准正则表达式字符串可能需要它,而我相当确定Perls会认为它是多余的。 – thecoshman
非捕获基团是重上的处理器(因为它需要额外的处理),而捕获基团是重上存储器(因为它具有存储许多东西)。但是,它们在语义上是等价的,因为它们可以以不同的方式匹配相同的事物。你可以把它们看作是具有不同引擎的汽车,但都可以作为骑行的一种手段。 –