小波と申します。


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

こちらでも実行時間は 1.3 秒かかりました。
実行すると,マッチすることなく $& は nil になるのですが,
それでいいのでしょうか。
みたところ,全角とアスキーの丸括弧を文字クラス指定するように
思える [((]  などがありますが,全角半角丸括弧が混在する
含む文字列を扱おうとしているのであればアスキーの '(' の前には
バックスラッシュが必要です。→ [\((]
 他の丸括弧も気になるところですが,本来の意図がどうなのかが
わからないので,いちおう老婆心まで。何をなさりたいのかを教えて
いただけると,よいアドバイスが得られるかもしれません。

いずれにせよ,正規表現のマッチだけで 1 秒以上も掛かるというのは
異常なことと思いますので,見直されたほうがよいのではないでしょう
か。この例ではグルーピングのための '(' と ')' が入れ子になって複
雑に入り組んでいるために,処理に時間がかかっているように思えます。


小波秀雄
京都女子大学を退職して名誉教授というプーになりました。




On 2017年02月21日 13:55, AOKI Yoshihiro wrote:
> あおきと申します。
>
> 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
>
>
> ===
> という程度の検証しか思い至らず,
> 「+」やキャプチャの「(...)」が冗長だとも思うのですが,
> 根本的に正規表現の書き方を誤っていますでしょうか...。
>