【问题标题】:Regex for finding empty anchor tags用于查找空锚标签的正则表达式
【发布时间】:2011-09-15 12:15:05
【问题描述】:

我正在寻找一个正则表达式,它可以在任何 html 字符串中查找所有空锚标记。 “空”表示其自身或其任何子节点中没有文本节点。

例如,应该找到这些:

<p>abc<a href="http://foo.com"></a>def</p>
<p>abc<a href="http://foo.com"><span></span></a>def</p>
<p>abc<a href="http://foo.com"><span><b></b></span></a>def</p>

这些不是:

<p>abc<a href="http://foo.com">Some text</a>def</p>
<p>abc<a href="http://foo.com"><span></span></a>def</p>
<p>abc<a href="http://foo.com">Some<span><b>Text</b></span></a>def</p>

正则表达式应该与 POSIX 兼容(我需要它用于 MySQL)。

为什么? 我需要它通过帮助自定义 regex_replace 函数删除 mysql 表列(使用纯 MySQL)中的空锚点,老实说,我不知道更好的方法来实现这一点。 MySQLs UpdateXML 不能同时用于多个匹配项。

【问题讨论】:

  • 我需要查找一个 mysql 表,其中包含一个包含 html 代码的字段,并且需要用纯 MySQL 替换空锚。你知道其他方法吗?
  • 试图用正则表达式解析 HTML 会导致悲伤。

标签: regex html-parsing


【解决方案1】:

这将起作用:

/<a href=.*?><\/a>/

【讨论】:

  • 我认为 POSIX 正则表达式不支持惰性搜索。试试 [^>]*
  • 这行不通,因为它只能找到空的锚标签,而不是那些带有其他空标签的标签(请参阅我上面帖子中的示例)。
【解决方案2】:

尝试使用这种模式,它适用于你的情况

<[^/>]+>[ \n\r\t]*</[^>]+>

【讨论】:

    【解决方案3】:

    答案是:不做。 Parsing HTML with regex is bad,而我使用 PHPs SimpleXML 类的组合来浏览 DOM 树。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多