Index > 控えめなマッチ(正規表現)(python,regex)
Wed, March 8, 2006

控えめなマッチ(正規表現)(python,regex)

正規表現は、デフォルトでいわゆる欲張りなマッチになるため、 それが不都合な場合がある。

たとえば、以下のような文字列があった場合...

    {link:title|http://foobar/}

の二つの部分に文字列を分解したい。 これを、 正規表現で処理するにはどうしたらいいか。

正規表現のテストコード

regexTest1.py

import java.lang as lang
import java.util.regex as re


rex="\\{(.*?):(.*)\\}"
patt=re.Pattern.compile(rex)

#m=patt.matcher(lang.String("{hoge:hoge2:hoge3}"))
m=patt.matcher(lang.String("{macroname:foo|http://lessisbetter.org/}"))
if m.find():
    print m.group(1)
    print m.group(2)

ポイントは、 (.?):(.) の部分で、*?と書くことで控えめにマッチするので、 デフォルトの欲張りなマッチのように、http: の”:”までマッチしないで済む。

 Twitter
follow me on Twitter
 Categories