0

我有一个模式被匹配到一个大字符串,使用 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);
4

1 回答 1

1

这种行为的原因是因为您使用.*术语的多个实例。

该术语可以对应于任何长度的字符串,并且可以跨越示例中的多个 tr 标签。

您需要使用非贪婪版本.*?。这应该够了吧。

注意:正如建议的那样,做您正在尝试的最佳方法是将 DOM 结构解析为 DOMElement 或 XML

于 2013-10-21T18:21:46.553 回答