我想知道使用非捕获组有什么意义。
我在regex101.com上测试了一堆简单的正则表达式,发现无论是否使用非捕获组都不会影响捕获字符串所需的步骤数。
对于example,
fo(o)
需要6个步骤来匹配foo
。
fo(?:o)
也需要6个步骤。
我知道使用非捕获组意味着匹配结果中会有少一个组,但那又是什么?我仍然可以计算我想要的文本在哪个组中并获得该组。我需要的组号可能会有所不同,但我仍然能够以任何方式获得该组。
f(o)+(.)\2+
几乎与
相同f(?:o)+(.)\1+
在阅读了这个post之后,我了解到,对于非捕获组,正则表达式引擎不会通过将字符放入数组来“捕获”非捕获组中匹配的字符。但是,存储捕获的字符串的空间是不是可以忽略不计?
如果使用非捕获组,捕获组的正则表达式的示例是什么/表现显着不同?或者,什么是必须使用非捕获组的情况的示例?
P.S。我不认为正则表达式的味道在这里很重要,因为每个主要的正则表达式的非捕获和捕获组的行为都相同(我认为)。如果我错了,在python中回答会很好。