再帰的な正規表現

[id:lethevert:20051204:p4]
[id:lethevert:20051208:p1]
これが通らない。

q = pre.compile(r"(?P<pn>(?:\(\))|(?:\((?P=pn)\)))")
text = q.sub('aa', text)

こんなエラーが出る。

Traceback (most recent call last):
  File "./ts.py", line 34, in ?
    text = q.sub('aa', text)
  File "/usr/lib/python2.3/pre.py", line 350, in sub
    return self.subn(repl, string, count)[0]
  File "/usr/lib/python2.3/pre.py", line 386, in subn
    regs = match(source, pos, end, 0)
pcre.error: ('Regex execution error', -2)
      • -

これは通るが、

q = pre.compile(r"(\(\))(\1)")

これは通らない。

q = pre.compile(r"(\(\1\))")

エラーは同じ。

      • -

http://www.kt.rim.or.jp/~kbk/regex/regex.html#NAMED_CAPTURE
ここでは、再帰的な正規表現が可能なように書いてあるけど・・・
pythonのpcreは古いらしいから、それが原因か? PHPには新しいpcreが使われているらしいので、そちらを試してみる方がいいかもしれない。

      • -

cygwinphpを利用するのは、そんなに手軽ではない感じ。
pcre単体で使えないかな?

      • -

これが、ちょっと参考になるかも。
http://namazu.org/~satoru/blog/archives/000076.html