https://regexper.com/#((A%20)%2B)%2B(%5B(%EF%BC%88%5D%5B%EF%BC%89)%5D)

$B+e紕障腆肴帥祚礙

徳島




2017年2月21日 15:20 konami <konami / kyoto-wu.ac.jp>:
> 小波と申します。
>
>
> 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
>>
>>
>> ===
>> という程度の検証しか思い至らず,
>> 「+」やキャプチャの「(...)」が冗長だとも思うのですが,
>> 根本的に正規表現の書き方を誤っていますでしょうか...。
>>
>