【问题标题】:Help on preg_match pattern关于 preg_match 模式的帮助
【发布时间】:2010-04-06 15:27:25
【问题描述】:

我想解析一个类似这样的 html 内容:

<div id="sometext">Lorem<br> <b>Ipsun</b></div><span>content</span><div id="block">lorem2</div>

我只需要在第一个 div 中捕获“Lorem&lt;br&gt; &lt;b&gt;Ipsun&lt;/b&gt;”。我怎样才能做到这一点?

Ps:第一个div里面的html有 多行,一篇文章。

谢谢

【问题讨论】:

  • 你为什么不用 HTML 解析器?
  • 因为这不是解析 HTML。
  • @kemp,这个非常解析 HTML,而不是用正则表达式来完成。
  • 我只看到一个字符串匹配。 Stackoverflow 上的人一看到涉及尖括号的正则表达式问题就会立即失明。

标签: php regex web-crawler preg-match


【解决方案1】:

尝试use regex to parse HTML 并不是一个很好的体验,因为 HTML 不是常规语言。另一种方法是使用 HTML 解析器,如 Simple HTML DOMDOM library/

简单的 HTML DOM 示例:

$html = str_get_html('<div id="sometext">Lorem<br> <b>Ipsun</b></div><span>content</span><div id="block">lorem2</div>');
echo $html->find('div[id=sometext]', 0)->innertext;

【讨论】:

  • @Yacoby,感谢您推荐这个库。我认为这很棒,它通过弹指解决了 OP 的问题 :)
【解决方案2】:

假设id 是已知的:

preg_match('#<div id="sometext">(.*?)</div>#s', $text, $match);

【讨论】:

  • 如果div 的属性多于id,则将不起作用。
  • div改成&lt;p&gt;也不行,是吗?我坚持这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
相关资源
最近更新 更多