我有一个像下面这样的字符串。 我想写一个preg_match_all()函数来获取'一个'和'两个'。为了得到理想的结果,必须对下面的表达式做些什么改变?
$featureTab = "<li>one</li><li id='someId'>two</li>";
我试过下面的代码。
preg_match_all('/(?<=\<li\>)(.*?)(?=\<\/li\>)/', $featureTab ,$matches);
但它只返回'一个'。因为pregx只考虑 li 标记之间的字符串而不是 id 。帮助我使用正则表达式,它将返回一个和两个。
答案 0 :(得分:2)
您可以简单地使用以下正则表达式
<li.*?>(.*?)<\/li>
在这里
`<li.*?>` here `(.*)` is to capture all attributes of `li` and `?` is to if no attributes is defined or not even space count also
因为两者都有不同的li
结构
你可以检查一下
注意:对于
HTML/XML
解析,请不要使用正则表达式,只需将DOMDocument
用于相同的
答案 1 :(得分:1)
您可以使用此正则表达式:
<li[^>]*>(.*?)<\/li>
$re = '/<li[^>]*>(.*?)<\/li>/';
$str = '<li>one</li><li id=\'someId\'>two</li>';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
在此处查看结果:https://3v4l.org/arFRq