[#42243] コミュニティと宗教の分離について — Beyond <beyond@...>

14 messages 2006/05/21

[#42267] メニューのループについて — リックス <rubyer4649@...>

りっくすです

21 messages 2006/05/27

[#42301] Re: メニューのループについて — "conundrum /" <conundrum@...>

conundrumです。

11 messages 2006/05/28

[ruby-list:42252] Re: 正規表現のマッチングがフリーズしてしまうコード

From: Tanaka Akira <[email protected]>
Date: 2006-05-23 04:24:51 UTC
List: ruby-list #42252
In article <[email protected]>,
  Tanaka Akira <[email protected]> writes:

> ([^\(\)]+)* と、繰り返しが 2重になって、括弧が出てこない部分
> のありとあらゆる分割に挑戦するからでしょう。

> 挑戦しないようにするには、そんなところで分割しないようにすれ
> ばいいわけで、
> 1. [^()]+ 同士が隣接しないようにパターンの構造を変える、
> 2. 直後が括弧であると先読みで指定する、
> 3. バックトラックを抑制する、
> といった方法があります。

後からもうひとつ思い付いたのですが、

4. 中身は繰り返しにしない、

という手もあります。

nested_parentheses = /
 (?<pare>    ( [^()] | \(\g<pare>\) )*       ){0} 
 \A\g<pare>\z/x

nested_parentheses =~ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)"
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next