您可以通過減少你的正則表達式的數量,表達的複雜性和輸入尺寸加快匹配。
例如,對於您的示例:'#<div id="above-related".*?</div>#s'
您可以通過使用strpos
和substr
減小輸入的大小:
$input = "<html>..</html>";
$offset = 0;
while ($start = strpos('<div id="above-related"', $input, $offset)) {
$end = strpos("</div>", $input, $start);
$substr = substr($input, $start, $end); // take the small slice
$result = preg_replace('#<div id="above-related".*?</div>#s', '', $substr);
// stitch the input back together:
$input = substr($input, 0, $start) . $result . substr($input, $end);
$offset = $start + 1; // continue looking for more matches
}
在您的例子的情況下,更換實際上並未使用比賽因此它可以是一個直線上升幅度:
$input = "<html>..</html>";
$offset = 0;
$match_start = '<div id="above-related"';
$match_end = '</div>';
while ($start = strpos($match_start, $input, $offset)) {
$end = strpos($match_end, $input, $start);
$input = substr($input, 0, $start + strlen($match_start)) . substr($input, $end);
$offset = $start + 1; // continue looking for more matches
}
這裏的竅門是strpos
和substr
比preg_replace
(容易100x)快得多。
如果你可以找到一個非正則表達式的匹配,或者甚至是每個規則的非正則表達式替換策略,那麼你將看到顯着的加速。