從實用的角度出發,需要提供對是相同的的要點是,錨定件是匹配空字符串該零寬度斷言:/(\Afoo)bar/
和/\A(foo)bar/
將在字符串的開頭相匹配foobar
同時存儲foo
在1組等
從邏輯上來看,應該有在生產率作爲空位置在開始時(^
,\A
)和結束行的無差異($
,\z
)/字符串仍然與兩個正則表達式版本匹配。
在實踐中,這是benchmarking結果:
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)
話說移動錨出了捕獲組的匹配使得一點點更快。 但是,具有較小的時間值,results vary。我認爲這種差別真的是疏忽大意。
應該沒有區別,因爲錨點是零寬度斷言。對於空洞空間進入什麼羣體沒有什麼不同,對於性能,這兩個錨點在兩種情況下都以消耗模式使用 - 這應該會導致相同的生產力。 –