[英]PHP: Preg_Match_All strange behaviour
我使用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);
此行为的原因是因为在多个实例中使用.*
术语。
该术语可以对应于任何长度的字符串,并且可以跨越示例中的多个tr标签。
您需要使用非贪婪版本.*?
。 这应该够了吧。
注意:如建议的那样,执行尝试操作的最佳方法是将DOM结构解析为DOMElement或XML
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.