[ruby-list:50489] Re: [質問] 正規表現の書き方
From:
<yamataka@...08.itscom.net>
Date:
2017-02-21 05:28:50 UTC
List:
ruby-list #50489
山口です。
> Mac OS 10.10.5
> ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin14]
> ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin14]
> UTF-8
>
> という環境で,
>
> s = "A A A A A A A A A A A A A A A A A A A A A A A A "
> /((A )+)+([((][))])/ =~ s
>
> 2行を実行すると,
> 1.4秒という比較的長い時間がかかります。
>
> % time ruby z.rb
> ruby z.rb 1.42s user 0.03s system 99% cpu 1.455 total
>
> (1)
> “A “の個数が増えるとより時間がかかるようでした。
> (2倍に増やすと10分経ってもプロンプトに戻ってきませんでした)
...
> 根本的に正規表現の書き方を誤っていますでしょうか...。
cygwin の環境ですが
正規表現を /(A )+/ =~ s にしました。
直ぐにPrompt 戻ってきます。
yama@roswell:/tmp$ uname -a
CYGWIN_NT-6.1 JPC20316739 2.7.0(0.306/5/3) 2017-02-12 13:18 x86_64
Cygwin
yama@roswell:/tmp$ cat ika.rb
# coding: utf-8
s = "A A A A A A A A A A A A A A A A A A A A A A A A "
s2 = "A A A A A A A A A A A A A A A A A A A A A A A A "
puts "#{s}"
s = s + s2 # 2倍に増やしました。
puts "#{s}"
if /(A )+/ =~ s then
puts "match"
else
puts "not match"
end
yama@roswell:/tmp$ time ruby ika.rb
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A
match
real 0m0.312s
user 0m0.093s
sys 0m0.202s