2011-09-01 77 views
1

我想實現類似「正則表達式編輯器」的東西。這是我的PHP應用程序的高級用戶。問題是,我需要正則表達式的「反射」(對於任何給定的正則表達式來說更精確)來找出它包含多少個子模式。在Python中,我只需鍵入:在PHP PCRE中計算子模式正則表達式

re.compile(regex).groups 

如何在PHP中實現該功能?如果表達式甚至能夠編譯,那麼能夠安全地知道它也是很好的。在Python中,會引發異常並且很容易處理它們。 PHP在沒有任何警報的情況下拍攝我的應用程序,或者產生一些無法捕獲的警告/錯誤。

感謝您的任何建議!

回答

1

preg正則表達式沒有反省 - pcre有一個函數(pcre_fullinfo),但由於某些原因,php開發人員並沒有爲它提供膠水。您可以考慮在bugs.php.net上提交該功能請求。

檢查正則表達式有效性的唯一方法是在try-catch塊內對其進行編譯,有關示例,請參閱How to check if a string is a valid PCRE?

也就是說,我不認爲允許用戶在服務器上執行任意正則表達式是一個好主意。一個惡意的或者簡單地不正確的表達可以很快地消耗掉所有的內存。

1

我可以看到,很難。可能模式的最大數目很難確定,因爲擴展/ POSIX/Perl正則表達式非常複雜。它們嵌套,捕獲一些模式意味着別人不會,等等。我不知道有什麼方法可以直接在PHP中確定最大模式數量,而自己完成模式基本上等於重新實現整個引擎,這非常複雜;我懷疑我們大多數人使用它的一半。

問題的後半部分is a dupe