Pythonのinvalid expression
前に、ruby-talk:217061で、Pythonの場合、以下の正規表現がエラーになることを書いた。
import re s = ("a"*300)+"b" re.search(r'^(a*)*$', s) # invalid expression
木村さんからエラーになる条件を教えてもらったので、自分でも少し調べてみた。
まず、a*ではなくa+にすると、何故かエラーにならない。
従って以下の場合、指数関数的組合せ爆発が起こってしまう。
s = ("a"*300)+"b" re.search(r'^(a+)*$', s) # very long time
ということで、最初のエラーは組合せ爆発を避けるためのものではないのではないか、と思った。