我有一个字符串,我想从中解析所有
<li></li>
标签,这就是字符串。
<li>Want this</li>DON'T WANT THIS<li>Want this</li>DON'T WANT THIS<li>Want this</li>...
这是我正在使用的代码:
$my_text= array();
preg_match('/<li>(.*?)<\/li>/', $str, $my_text);
但这不起作用。当我运行它时,这是 my_text 数组:
[0] => "<li>Want this</li>"
[1] => "Want this"
1000 个元素中只有 2 个元素。
Toto 是正确的,这是一个非常简单的修复:
$str = "<li>Want this</li>DON'T WANT THIS<li>Want this</li>DON'T WANTTHIS<li>Want this</li>";
$my_text= array();
preg_match_all('/<li>(.*?)<\/li>/', $str, $my_text);
我可以提出另一个基于 SimpleXML 和 xpath 查询 的解决方案吗?
<?php
$string = "<html>
<li>Want this</li>DON'T WANT THIS<li>Want this</li>DON'T WANT THIS<li>Want this</li>
</html>";
$xml = simplexml_load_string($string);
# select only the li elements where the text is equal to...
$elements = $xml->xpath("//li[text() = 'Want this']");
print_r($elements);
// yields a list of your desired elements
?>
提示:您的正则表达式也可以工作,请参阅regex101.com上的演示。但请考虑使用其他分隔符:
$regex = '~<li>(.+?)</li>~';
preg_match_all($regex, $string, $matches);
print_r($matches);
preg_match_all()
函数,如下所示:
<?php
$str = "<li>Want this</li>DON'T WANT THIS<li>Want this</li>DON'T WANT THIS<li>Want this</li>";
preg_match_all('/<li>(.*?)<\/li>/', $str, $out);
echo '<pre>';
print_r($out);
按照上面的建议使用 preg_match_all。这确实是最好的解决方案。
preg_match_all("|<[^>]+>(.*)</[^>]+>|U", $input, $result, PREG_SET_ORDER);
上面的示例将从输入中删除所有 html 标签,而不仅仅是 li。