【问题标题】:PHP preg_match to grab text in between two HTML tagsPHP preg_match 在两个 HTML 标记之间抓取文本
【发布时间】:2012-06-10 01:08:18
【问题描述】:

我正在尝试使用 preg_match 来抓取两个 HTML 标记之间的文本。

这是我的代码的简化版本:

 $sPattern = "/<li class=\"sample\">(.*?)<\/li>/s";
 $sText = "blah blah blah <li class=\"sample\">hello world!</li> blah blah blah";
 preg_match($sPattern,$sText,$aMatch);
 echo '<pre>'.print_r($aMatch).'</pre>';

但是,当我运行此代码时,我会返回完整的 HTML 字符串:

<li class=\"sample\">hello world!</li>

有人知道我需要对正则表达式进行哪些更改吗?

注意:我知道从 HTML 页面解析数据的其他方法。由于各种原因,DOMDocument 和 DOMXPath 不是一个选项——我坚持使用 RegEx。

【问题讨论】:

  • 对结果执行strip_tags() :)
  • Funny ;) 我希望我可以让正则表达式做它应该做的事情。
  • 已回答,但obligatory mention.
  • Thanx.. 你的问题救了我的命:P

标签: php regex


【解决方案1】:

这应该可以按您的意愿工作:

$sPattern = "/<li class=\"sample\">(.*?)<\/li>/s";
$sText = "blah blah blah <li class=\"sample\">hello world!</li> blah blah blah";
preg_match($sPattern,$sText,$aMatch);
echo '<pre>'.$aMatch[1].'</pre>';

【讨论】:

  • 它返回“你好世界!”当我运行它时,我认为这是你想要的?
【解决方案2】:

您需要访问捕获组输出。

var_dump( $aMatch[1]);

Here is a demo 表明正则表达式工作正常,您只是错误地访问了结果数组。

【讨论】:

  • nickb 是正确的——结果证明我重新创建的代码并不能完全代表问题。我访问的是 $aMatch[0] 而不是 $aMatch[1]。感谢 nickb 的帮助——我会在几分钟后接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 2011-04-29
相关资源
最近更新 更多