正则表达式,用于在带或不带id属性的标签之间获取字符串

时间:2017-09-21 05:35:32

标签: php regex preg-match-all

我有一个像下面这样的字符串。 我想写一个preg_match_all()函数来获取'一个'和'两个'。为了得到理想的结果,必须对下面的表达式做些什么改变?

$featureTab = "<li>one</li><li id='someId'>two</li>";

我试过下面的代码。

preg_match_all('/(?<=\<li\>)(.*?)(?=\<\/li\>)/', $featureTab ,$matches);

但它只返回'一个'。因为pregx只考虑 li 标记之间的字符串而不是 id 。帮助我使用正则表达式,它将返回一个两个

2 个答案:

答案 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结构

你可以检查一下

Demo

  

注意:对于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