我已使用preg_match_all的PREG_PATTERN_ORDER
返回字符串中找到的值中的位置。然後當試圖substr
,引用他們回來,他們不排隊。我預計會有一個偏移量,但每個案例似乎存在未確定的偏差。substr值不匹配preg_match_all PREG_PATTERN_ORDER
這是因爲preg_match_all返回字節而不是字符?如果是這樣,有沒有辦法將字節轉換爲字符?如果我完全沒譜,我可以張貼一些代碼...
好這裏是適用代碼:
// RETURN POSITION OF START AND END TAGS TO ARRAY
function getTagPositions($strBody, $start, $end)
{
preg_match_all('/' . preg_quote($start, '/') . '([\w\s.]*?)'. preg_quote($end, '/').'/im', $strBody, $strTag, PREG_PATTERN_ORDER);
$intOffset = 0;
$intIndex = 0;
$intTagPositions = array();
foreach($strTag[0] as $strFullTag) {
$intTagPositions[$intIndex] = array('start' => (strpos($strBody, $strFullTag, $intOffset)), 'end' => (strpos($strBody, $strFullTag, $intOffset) + strlen($strFullTag)));
$intOffset += strlen($strFullTag);
$intIndex++;
}
return $intTagPositions;
}
function arrayValRecursive($key, array $arr){
$val = array();
array_walk_recursive($arr, function($v, $k) use($key, &$val){
if($k == $key) array_push($val, $v);
});
return count($val) > 1 ? $val : array_pop($val);
}
$arrayOfPositions = getTagPositions($html,$go,$stop);
$arrayOfStart = arrayValRecursive('start', $arrayOfPositions); //print_r($arrayOfStart);
$arrayOfEnd = arrayValRecursive('end', $arrayOfPositions); //print_r($arrayOfEnd);
$offset = 0;
$range = $arrayOfStart[$i] + $offset;
$rangeEnd = $arrayOfEnd[$i];
echo '<br>'.$range.' to '.$rangeEnd.' is: <br>';
echo substr($html, $range, $rangeEnd);
你能後的代碼? – jcjr
[preg_match_all](http://php.net/manual/en/function.preg-match-all.php)「返回完整模式匹配的數量(可能爲零),如果發生錯誤,則返回FALSE。」看起來你錯誤地使用了這個功能。 –