当正则表达式中捕获的模式与锚点相邻时,包括捕获中的锚点或不捕获的锚点不会影响捕获的字符串。在以下(Ruby)正则表达式对中,
/(\Afoo)bar/
/\A(foo)bar/
/foo(bar\z)/
/foo(bar)\z/
/foo(^bar)baz/
/foo^(bar)baz/
/foo(bar$)baz/
/foo(bar)$baz/
结果是一样的。从性能来看,是否更好地将锚点包含在捕获中,或者不是,或者它没有区别?
答案 0 :(得分:0)
从实际的角度来看,你提供的对是相同的。关键是锚是零宽度断言,匹配空字符串:/(\Afoo)bar/
和{{1}在将/\A(foo)bar/
存储在组1中时,将在字符串的开头匹配foobar
从逻辑的角度来看,生产力应该没有差异,因为开头的空位(foo
,^
)和结尾(\A
,{{行/字符串的1}})仍然与两个正则表达式版本匹配。
实际上,这是benchmarking:
的结果$
是
\z
说将锚移出捕获组可以使匹配更快一点。 但,时间值较小,为results vary。我认为差异实在是疏忽了。