是否更好或不在正则表达式捕获中包含锚点?

时间:2016-04-21 04:26:34

标签: regex

当正则表达式中捕获的模式与锚点相邻时,包括捕获中的锚点或不捕获的锚点不会影响捕获的字符串。在以下(Ruby)正则表达式对中,

/(\Afoo)bar/
/\A(foo)bar/

/foo(bar\z)/
/foo(bar)\z/

/foo(^bar)baz/
/foo^(bar)baz/

/foo(bar$)baz/
/foo(bar)$baz/

结果是一样的。从性能来看,是否更好地将锚点包含在捕获中,或者不是,或者它没有区别?

1 个答案:

答案 0 :(得分:0)

从实际的角度来看,你提供的对是相同的。关键是锚是零宽度断言,匹配空字符串/(\Afoo)bar/和{{1}在将/\A(foo)bar/存储在组1中时,将在字符串的开头匹配foobar

从逻辑的角度来看,生产力应该没有差异,因为开头的空位(foo^)和结尾(\A,{{行/字符串的1}})仍然与两个正则表达式版本匹配。

实际上,这是benchmarking

的结果
$

\z

说将锚移出捕获组可以使匹配更快一点。 ,时间值较小,为results vary。我认为差异实在是疏忽了。