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

好的

当要在正则表达式中捕获的模式与锚点相邻时,无论是否捕获,都不会影响捕获的字符串。在以下(Ruby)正则表达式对中,

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

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

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

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

结果是一样的。从性能上来说,是否最好在捕获中包含锚点,还是没有区别?

威克多·斯特里比尤

从实际的角度来看,您提供的对与相同。要点是,锚是零宽度的断言,它们匹配空字符串/(\Afoo)bar/并且在存储在组1中时将字符串的开头/\A(foo)bar/匹配foobar,依此类推foo

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

实际上,这是基准测试的结果

require 'benchmark'
Benchmark.bmbm do |x|
    x.report { 500000.times { a = 'foobar'[/(\Afoo)bar/] } }
    x.report { 500000.times { a = 'foobar'[/\A(foo)bar/] } }
end

Rehearsal ------------------------------------
   0.630000   0.000000   0.630000 (  0.628344)
   0.620000   0.000000   0.620000 (  0.628949)
--------------------------- total: 1.250000sec

       user     system      total        real
   0.640000   0.000000   0.640000 (  0.635875)
   0.630000   0.000000   0.630000 (  0.627771)

说将锚点移出捕获组会使匹配快一点。但是,使用较小的时间值,结果会有所不同我认为区别确实是疏忽大意。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更好的ReverseStringFormat正则表达式

来自分类Dev

正则表达式,更好的方法

来自分类Dev

使正则表达式更好

来自分类Dev

Ruby gsub的正则表达式!锚点不匹配

来自分类Dev

正则表达式“不包含”

来自分类Dev

正则表达式不包含

来自分类Dev

正则表达式不包含

来自分类Dev

正则表达式中不包含空格

来自分类Dev

在Elasticsearch中不包含正则表达式

来自分类Dev

正则表达式忽略锚点包围的标签

来自分类Dev

哪个正则表达式效果更好?

来自分类Dev

修改正则表达式以获得更好的匹配

来自分类Dev

如何以编程方式从Ruby中的正则表达式中删除锚点?

来自分类Dev

C#正则表达式中的角色类和锚点

来自分类Dev

为文本中的正则表达式匹配添加唯一的锚点

来自分类Dev

正则表达式:匹配单词中未知数量字母的更好方法

来自分类Dev

我如何更好地理解SmaCC在正则表达式中如何使用“ isMethod”功能?

来自分类Dev

如何在python中编写更好的正则表达式?

来自分类Dev

在Ruby中检查多个正则表达式条件的更好方法?

来自分类Dev

正则表达式 - 匹配搜索字符串中单词的更好部分

来自分类Dev

正则表达式选择除某些锚点之外的所有锚点

来自分类Dev

正则表达式,用于捕获给定字符串锚点之间的字符串

来自分类Dev

包含中的正则表达式

来自分类Dev

包含中的正则表达式

来自分类Dev

正则表达式在捕获组之后不包含匹配项

来自分类Dev

正则表达式捕获点被数字包围

来自分类Dev

正则表达式捕获:将整个匹配项包含在捕获组中

来自分类Dev

正则表达式捕获:将整个匹配项包含在捕获组中

来自分类Dev

在某个点之后不包含子字符串的正则表达式

Related 相关文章

热门标签

归档