[#42196] YAML でEUC は使えないのでしょうか。 — Tomokiyo Nomura <tnomura@...>
野村@延岡です。
8 messages
2006/05/05
[#42214] [ANN] RubyKaigi 2006 Announcement — SASADA Koichi <ko1@...>
日本Rubyの会、日本Rubyカンファレンス2006実行委員のささだです。
4 messages
2006/05/10
[#42235] ftp:// のリストを open-uri で得られないでしょうか — "Hideo Konami" <konami@...>
小波です。
5 messages
2006/05/20
[#42243] コミュニティと宗教の分離について — Beyond <beyond@...>
14 messages
2006/05/21
[#42245] Re: コミュニティと宗教の分離について
— Masayoshi Takahashi <takahashi@...>
2006/05/22
高橋征義です。「日本Rubyの会」という集まりの代表をしております。
[#42253] File objectがいつのまにか nilに、 — しん <dezawa@...>
出沢です
9 messages
2006/05/23
[#42267] メニューのループについて — リックス <rubyer4649@...>
りっくすです
21 messages
2006/05/27
[#42275] Re: メニューのループについて
— rubikitch <rubikitch@...>
2006/05/27
From: リックス <rubyer4649@yahoo.co.jp>
[#42276] Re: メニューのループについて
— Hiroshi Yuki <hyuki@...>
2006/05/27
結城です。
[#42301] Re: メニューのループについて — "conundrum /" <conundrum@...>
conundrumです。
11 messages
2006/05/28
[#42306] Re: メニューのループについて
— rubikitch <rubikitch@...>
2006/05/29
From: "conundrum /" <conundrum@hotmail.co.jp>
[ruby-list:42233] Re: 正規表現のマッチングがフリーズしてしまうコード
From:
Tanaka Akira <akr@...17n.org>
Date:
2006-05-20 12:37:02 UTC
List:
ruby-list #42233
In article <446F00A4.80606@airemix.com>,
"NARUSE, Yui" <naruse@airemix.com> writes:
> nested_parentheses = /(?<pare>\(([^\(\)]+|\g<pare>)*\))/
>
> これだとちゃんとマッチします。
> もっとも、閉じる方向で括弧が余計な場合は大丈夫ですが、
> 開き括弧が余計にある場合は固まりますが。
([^\(\)]+)* と、繰り返しが 2重になって、括弧が出てこない部分
のありとあらゆる分割に挑戦するからでしょう。
たとえば、aaaaaaa は
aaaaaaa
aaaaaa a
aaaaa aa
aaaaa a a
aaaa aaa
aaaa aa a
aaaa a aa
aaaa a a a
aaa aaaa
aaa aaa a
aaa aa aa
aaa aa a a
aaa a aaa
aaa a aa a
aaa a a aa
aaa a a a a
aa aaaaa
...
というように分割できて、これを全部試せばそりゃ時間がかかりま
す。
挑戦しないようにするには、そんなところで分割しないようにすれ
ばいいわけで、
1. [^()]+ 同士が隣接しないようにパターンの構造を変える、
2. 直後が括弧であると先読みで指定する、
3. バックトラックを抑制する、
といった方法があります。
nested_parentheses = /
(?<text> [^()]* ){0}
(?<pare> \g<text> ( \(\g<pare>\) \g<text> )* ){0}
\A\g<pare>\z/x
nested_parentheses = /
(?<pare> ( [^()]+(?=[()]) | \(\g<pare>\) )* ){0}
\A\g<pare>\z/x
nested_parentheses = /
(?<pare> ( (?> [^()]+ ) | \(\g<pare>\) )* ){0}
\A\g<pare>\z/x
--
[田中 哲][たなか あきら][Tanaka Akira]