我有一個模式被匹配到一個大字符串,使用preg_match_all,它得到正確的匹配就好了,但它似乎進入每個匹配,並嘗試找到更多的匹配,然後進入其中的每一個,並在最後一個空字符串時停止。聽起來像某種遞歸,但我不需要也不想這樣,有沒有辦法阻止它?PHP:Preg_Match_All奇怪的行爲
謝謝你的幫助!
function getCategories($source)
{
$categories = array();
$pattern = "~<span class=.*\n<table class=.*\n<tr>\n<th.*\n<.th>\n<th.*\n<.th>\n<th.*\n<.th>\n<th.*\n<.th>\n<th.*\n<.th>\n<th.*\n<.th><.tr>\n(<tr id=.*\n(.*\n){6}<.td><.tr>(<.table>)?\n)*~";
preg_match_all($pattern, $source, $categories);
return $categories;
}
$categories = getCategories($source);
print_r($categories);
是的,你不使用的HTML正則表達式解決它,並切換到DOM/XPath的最好的方法代替。 –
什麼是醜陋的正則表達式...只是使用像[phpQuery](https://code.google.com/p/phpquery/) – HamZa
我幾乎終於得到了我的代碼在某種程度上工作,我不有時間去嘗試理解新的類並重寫它,是否沒有辦法去刪除函數的這種遞歸性質? – AndrewB