[ruby-list:50488] [質問] 正規表現の書き方
From:
AOKI Yoshihiro <ml-reader@...>
Date:
2017-02-21 04:55:20 UTC
List:
ruby-list #50488
あおきと申します。 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分経ってもプロンプトに戻ってきませんでした) (2) 正規表現の記述うち, [((] [))] という塊の片方を削除しても状況は変わりませんでした。 (3) ただし,文字クラス[...]内の 半角(,) 全角(, ) の4つのうち1つでも削除するとすぐにプロンプトに戻ってきます。 % time ruby z.rb ruby zz.rb 0.06s user 0.03s system 97% cpu 0.094 total (4) 2つある「+」のうち片方を削除してもすぐにプロンプトに戻ってきます。 % time ruby z.rb ruby z.rb 0.06s user 0.03s system 96% cpu 0.088 total === という程度の検証しか思い至らず, 「+」やキャプチャの「(...)」が冗長だとも思うのですが, 根本的に正規表現の書き方を誤っていますでしょうか...。