2024 年 PHP Conference Japan

PCRE 函式

目錄

新增筆記

使用者貢獻的筆記 3 則筆記

steve at stevedix dot de
20 年前
要記住的是,正則表達式實際上是一種聲明式程式語言,就像 Prolog:您的正則表達式是一組規則,正則表達式直譯器會嘗試將其與字串匹配。在此匹配過程中,直譯器會做出某些假設,並持續假設,直到匹配失敗,才會導致其回溯。除非明確告知不要這樣做,否則正則表達式會假設「貪婪匹配」,這可能會導致大量回溯。一般的經驗法則是,回溯越多,匹配過程越慢。

因此,如果您嘗試優化程式以使其快速運行(並且如果您不能沒有正則表達式),那麼優化正則表達式以使其快速匹配至關重要。

我建議使用「The Regex Coach」之類的工具來除錯您的正則表達式字串。

http://weitz.de/files/regex-coach.exe (Windows 安裝程式) http://weitz.de/files/regex-coach.tgz (Linux tar 封存檔)
theking2 at king dot ma
1 年前
撰寫正則表達式可能很繁瑣且容易出錯。在 https://regex101.com/ 上測試您的正則表達式,以確保您沒有遺漏任何內容。它甚至會為範例字串加上顏色標記。
stronk7 at moodle dot org
17 年前
關於 5.2.x 和 pcre.backtrack_limit 的評論

請注意,此設定在先前的 PHP 版本中不存在,並且在這些版本中的行為(或限制)實際上更高,因此所有這些 PCRE 函式都能夠「擷取」更長的字串。

隨著此設定的到來,預設值為 100000(小於 100K),您將無法使用例如「非貪婪」修飾符來匹配/擷取超過該大小的字串。

因此,在許多情況下,您需要提高這個(我認為非常小)的限制。

最糟糕的是,PHP 根本不會匹配/擷取超過 pcre.backtrack_limit 的字串,並且對此完全保持沉默(我認為如果提高它會拋出一些 NOTICE/WARNING 可以幫助開發人員很多)。

從我在論壇、錯誤報告等地方看到的,有很多人正在遭受這種行為改變的困擾。

希望這則筆記有幫助,再見 :-)
To Top