[ruby-list:47312] Re: マッチしない正規表現「.*?」が遅い?

From: "NARUSE, Yui" <naruse@...>
Date: 2010-08-17 14:51:26 UTC
List: ruby-list #47312
成瀬です。

(2010/08/17 22:25), dezawa@aliadne.net wrote:
> そんなものじゃないでしょうか。 って書いた出沢です
> 
> とはいえ、
> 人が見ると 
>    /<X(?:\s[^>]*)?>.*? はたくさんあるなぁ 、でも
>    <\/Y>/ はないなぁ
>    よって nil
> 
> というのが一目で判ります。
> これを(低コストで)実装するのは大変なんでしょうね。

Ruby, Perl, Python, JavaScript などが採用している NFA 型のエンジンでなく、
grep や sed などで用いている DFA 型のエンジンなら一瞬ですね。
後方参照やメモリする括弧、最左最長マッチなどを諦めれば NFA から DFA への
変換は理論上可能です。

で、参照を入れ忘れたのですが、この辺の話は
詳説正規表現の6.1.4や以下のサイトで語られています。
http://swtch.com/~rsc/regexp/regexp1.html

-- 
NARUSE, Yui  <naruse@airemix.jp>

In This Thread