繁体   English   中英

PHP:Preg_Match_All奇怪的行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM