On Sep 1, 2008, at 5:11 AM, Patrick He wrote:
Additionally, you can use pattern “(.|\n)” if you want to match all
characters including “\n” in single line mode.
You can, but alternation is more work for the regex engine:
#!/usr/bin/env ruby -wKU
require “benchmark”
DATA = (“a”…“z”).to_a.join
TESTS = 100_000
Benchmark.bmbm do |results|
results.report("/./m:") { TESTS.times { DATA.scan(/./m) } }
results.report("/(?m:.)/:") { TESTS.times { DATA.scan(/(?m:.)/) } }
results.report("/(.|\n)/:") { TESTS.times { DATA.scan(/(.|\n)/) } }
end
>> Rehearsal ---------------------------------------------
>> /./m: 3.490000 0.100000 3.590000 ( 3.617568)
>> /(?m:.)/: 3.560000 0.100000 3.660000 ( 3.687604)
>> /(.|\n)/: 5.010000 0.120000 5.130000 ( 5.190762)
>> ----------------------------------- total: 12.380000sec
>>
>> user system total real
>> /./m: 3.510000 0.110000 3.620000 ( 3.636716)
>> /(?m:.)/: 3.560000 0.100000 3.660000 ( 3.671196)
>> /(.|\n)/: 5.030000 0.120000 5.150000 ( 5.154031)
END
James Edward G. II
