在Python正則表達式,Python的正則表達式的源字符串長度
re.compile("x"*50000)
給我OverflowError: regular expression code size limit exceeded
但下面一個沒有得到任何錯誤,但它擊中100%的CPU,並且耗時1分我PC
>>> re.compile(".*?.*?.*?.*?.*?.*?.*?.*?.*?.*?"*50000)
<_sre.SRE_Pattern object at 0x03FB0020>
這是正常的嗎?
我應該承擔,".*?.*?.*?.*?.*?.*?.*?.*?.*?.*?"*50000
比"x"*50000
短?
測試在Python 2.6中,Win32的
更新1:
它看起來像".*?.*?.*?.*?.*?.*?.*?.*?.*?.*?"*50000
可以減少.*?
那麼,這個怎麼樣?
re.compile(".*?x"*50000)
它編譯,如果一個也可以減少".*?x"
,它應該匹配字符串"abcx"
或"x"
獨自一人,但它不匹配。
所以,我缺少的東西?
更新2:
我的觀點是不知道正則表達式源字符串的最大限制,我想知道一些原因/溢流處理程序捕獲的"x"*50000
概念,但不是在".*?x"*50000
。
它沒有意義對我來說,這就是原因。
它缺少的東西上溢檢查或它只是罰款或者它真的四溢的東西嗎?
任何提示/意見將不勝感激。
否「。*?x」* 5000不會減少爲「。*?x」 - 它減少到5000 x的正則表達式,並帶有「。*?」在每個x之前。這就是爲什麼它不匹配「abcx」或「x」 - 它只能匹配5000個字符串。 – 2010-01-04 09:34:02
它提醒我,當我嘗試將SVN路徑的ABNF轉換爲正則表達式時,我打了一次PHP的正則表達式的最大長度。所以,恕我直言,答案將是很好的知道。 – Boldewyn 2010-01-04 09:35:55
@Dave Kirby,謝謝,但它的50000(50k)。我原來的問題是're.compile(「x」* 50000)'沒有被編譯,但是're.compile(「。*?x」* 50000)'被編譯。 – YOU 2010-01-04 09:37:04