我喜歡這兩種解決方案
function GetBetween($content,$start,$end)
{
$r = explode($start, $content);
if (isset($r[1])){
$r = explode($end, $r[1]);
return $r[0];
}
return '';
}
function get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
我也做了一些基準以及以上兩種解決方案並且都給出幾乎相同的時間。你也可以測試它。我給這兩個函數提供了一個文件來讀取,其中有大約60000個字符(用Word的字數統計),並且這兩個函數在大約0.000999秒內找到。
$startTime = microtime(true);
GetBetween($str, '<start>', '<end>');
echo "Explodin Function took: ".(microtime(true) - $startTime) . " to finish<br />";
$startTime = microtime(true);
get_string_between($str, '<start>', '<end>');
echo "Subsring Function took: ".(microtime(true) - $startTime) . " to finish<br />";
你能給一個樣本輸入的例子,你期望的結果是什麼? – 2011-05-18 13:43:10
作爲一個方面的評論,我的猜測是你想要儘可能小的比賽。如果是這樣,你需要使匹配非貪婪:'(。| \ n)*?'。另外,請注意可能包含正則表達式特殊字符的'$ start'和'$ end'字符串。 – krookedking 2011-05-18 13:43:54
你會得到什麼錯誤? – Femi 2011-05-18 13:45:51