根據一些測試,我發現此函式的這些重要特性。(這些內容最好
作為其規格的一部分記錄下來,例如用於確認。如果沒有這些內容,
這只是一種實驗性的好奇心。不過,仍然比瞎猜好!;)
1. 變更會在回呼中以級聯方式在主題上進行,也就是說,如果其模式與
變更的主題比對,回呼對主題所做的變更會被下一個回呼看到。
變更的主題。
(但是 *相同* 回呼先前呼叫所做的變更(在任何主題上)
將不會再次被該回呼看到。)
2. 模式 + 回呼配對會依其在 $patterns_and_callbacks 中出現的順序
套用。
3. 回呼不能為 null(或 ''),以快速捷徑進行空取代。
4. 整體而言,演算法開始迭代 $patterns_and_callbacks,然後
將每個 $subject 反覆傳遞給目前的回呼,以便在目前主題上
比對其模式的每個單一比對(與 "preg_match_all" 不同,
它可以在一次執行中完成相同的工作,並在陣列中傳回累積的結果)。
這基本上表示「皇冠上的寶石」,一個更有效率的函式
"preg_replace_all_callback_array" 仍然在集合中遺失。
(當然,這會更適合正規表示式 API 的新設計,其中一個
API 可以透過一些 $flags = [] 陣列彈性地處理各種不同的模式。)
5. (最後一個並非此函式特有,而是正規表示式固有的,另一方面,
它可能比 PHP 正規表示式支援中的任何其他地方更相關。)
即使是表面上簡單的情況也可能會產生大量(且難以預測的)
比對數量,因此會產生回呼呼叫,請記住設定
$limit(如果負擔得起)。當然,請嘗試先銳化您的模式!
例如,使用 ^...$ 定錨來避免在主題的比對子字串上產生非預期的額外呼叫
,(也就是說,沒有定錨的 '/.*/' 會比對兩次:一次針對
整個主題,然後針對尾隨的空子字串 -- 但我不確定
這是否應該是正確的行為。)