【问题标题】:Which regular expression to use to extract some words from an HTML text?使用哪个正则表达式从 HTML 文本中提取一些单词?
【发布时间】:2010-12-07 13:35:41
【问题描述】:

我很难构建一个正则表达式来从 HTML 文本中获取一些单词。

假设我有以下内容:

<p style="padding-left :12px">SOME_TEXT_I_WANT</p><p>SOME_OTHER_TEXT</p>

*SOME_TEXT_I_WANT* 和 *SOME_OTHER_TEXT* 可以是诸如“SOME RANDOM TEXT”之类的一堆单词,也可以是诸如“<strong>SOME BOLD TEXT</strong>”之类的 HTML 文本

我的目标是用一个正则表达式提取这些文本。

【问题讨论】:

  • 如果第二部分是<p>some text<p>and some other text</p> and yet more text</p>呢?正则表达式和 HTML 总是很脆弱的组合。
  • 在仇恨者开始之前,有一个关于html和RE的运动。 RE可以在一定程度上解析简单的html,并且可以做得很好。然而,就像 Piskvor 说的(我可以补充一下),“它很脆弱”;可行,但要小心你的来源。

标签: regex


【解决方案1】:

您打算使用哪种语言?该语言是否存在 HTML 解析器?如果是,考虑使用解析器

但是,如果这是“一次性”,您也许可以通过以下方式解决:

#<p[^>]*>(.*?)</p>#

上面有一定的限制,最明显的是它不匹配&lt;p data-something="a &gt; b"&gt;...&lt;/p&gt;,也不嵌套&lt;p&gt;s。 (我无法判断您尝试解析的标记是否实际上允许嵌套 &lt;p&gt;s — 只是通知您可能存在的陷阱。)

【讨论】:

  • 确实如此。这适用于非常简单类似 HTML 的字符串;使用正则表达式从 HTML 中提取数据是一场等待发生的噩梦。
  • @Piskvor 没错。在加入 RegExp 潮流之前,应该始终非常确定输入实际上适合基于表达式的匹配。
  • 这很好用!这很明显,但我正在寻找一个困难的东西......别担心,这不是为了解析大型网页,而只是来自个人网络应用程序的一些文本。
  • @Anth0 在这种情况下你应该没问题:)
【解决方案2】:

假设您使用的是 PHP:

$html = "<p>some text here</p>"
preg_replace("/<.+?>/","", $html);

【讨论】:

    【解决方案3】:

    不要使用正则表达式。如果你问为什么,有一个非常流行的SO post 描述了如果你尝试使用正则表达式来解析 HTML 会发生什么。

    使用您的语言的 HTML 或 XML 解析器并使用现有功能提取您需要的内容。

    【讨论】:

      猜你喜欢
      • 2015-10-28
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多