正则表达式来获取PHP中2个标签的文本

时间:2014-07-30 05:36:13

标签: php regex preg-match

我有像

这样的字符串
<li class="video_description"><strong>Description:</strong> hello world, This is test description.</li>

我想要字符串,“你好世界,这是测试说明。”每次该字符串都是动态的。

那么,我怎么能在这里使用preg_match选项呢?

3 个答案:

答案 0 :(得分:4)

使用正则表达式解析PHP中的html并不是一个好主意。

我建议使用simple_html_dom因为它很简单并且适合您的情况

答案 1 :(得分:1)

关于使用正则表达式解析html的所有免责声明,如果你想要一个正则表达式,你可以使用它:

>\s*\K(?:(?!<).)+(?=</li)

Regex Demo 中查看匹配项。

示例PHP代码

$regex = '~>\s*\K(?:(?!<).)+(?=</li)~';
preg_match_all($regex, $yourstring, $matches);
print_r($matches[0]);

<强>解释

  • >\s*匹配结束>和可选空格
  • \K告诉引擎放弃与其返回的最终匹配项目匹配的内容
  • (?:(?!<).)+匹配任何未启动标记的字符
  • 前瞻(?=</li)声称接下来是</li

答案 2 :(得分:0)

另一种解决方案

<li.*<\/strong>\s?(.*)<\/li>

用法:

$string = '<li class="video_description"><strong>Description:</strong> hello world, This is test description.</li>';
$pattern = '/<li.*<\/strong>\s?(.*)<\/li>/';
if(preg_match($pattern, $string)){
  echo "Macth was found";
}