> 請注意包含巢狀不定重複的模式。當應用於不匹配的字串時,這些模式可能需要很長時間才能執行。
說它需要「很長的時間」是一種保守的說法:所需的時間會呈指數增長,具體來說是 2^n,其中 n 是 "a" 字元的數量。如果您在使用者提供的輸入上執行此類運算式,則此行為可能會導致「正規表示式阻斷服務」(ReDoS)。
為了避免受到 ReDoS 的攻擊,請執行以下三件事中的一件(或可能不只一件)
* 編寫您的運算式,使其不會受到攻擊。https://regular-expressions.dev.org.tw/redos.html 是一個很好的資源(PHP/PCRE 中都提供「原子」和「擁有格」選項)。如果您的肉眼無法發現所有問題,請使用「ReDoS 偵測器」或「正規表示式檢查器」。
* 為 preg_match 設定一些限制。在 https://php.dev.org.tw/manual/en/pcre.configuration.php. 上提到的值使用 `ini_set(...)`。減少限制可能會導致正規表示式失敗,但這通常比讓整個伺服器停滯更好。
* 使用不同的正規表示式實作。以前有一個 RE2 擴充功能;但現在沒有了!