【问题标题】:Remove links from image through regex通过正则表达式从图像中删除链接
【发布时间】:2018-06-25 15:34:44
【问题描述】:

我想删除网站上图片周围的链接。我将 SQL 文件导出到记事本++。并使用搜索和替换我试图删除这个链接(正则表达式)。我想保留图像本身。

在记事本++中,我使用以下代码(参见example

(<a href=.*?)<img.*?>(.*?a>)

此代码适用于 99% 的情况,但不适用于同时包含链接和图片以及链接的页面。在这种情况下,它将选择从第一个链接开始的文本,直到图像本身。另见https://regex101.com/r/ke3ip3/2

有人对此有解决方案吗?

【问题讨论】:

  • 您的预期输出是什么?请提供一些预期的输入/输出,以便我们确切知道您想要发生什么。如果没有这个,要准确理解你想要做什么有点困难。
  • 嗨詹姆斯,我已经重写了问题并添加了更多信息:)

标签: regex notepad++


【解决方案1】:

你有两个问题,实际上是三个:

标签的开头和 a 之间有一个额外的空格,因此第一个模式匹配太多:

试试这样:

(<\s*a\s+href=[^>]+>)<img[^>]+>(<\/a>)

Demo

我还建议使用固定的结束标记模式。

最后,它看起来像是一次性工作。但是,不建议使用正则表达式解析/操作 HTML。

正如 cmets 中所讨论的,图像周围的捕获组有助于将其重新插入替换。把它们放在一起

<\s*a\s+href=[^>]+>(<img[^>]+>)<\/a>

在正则表达式模式下替换为:$1

【讨论】:

  • 如果img标签在自己的捕获组中会更好吗?所以之后你可以用$1替换匹配吗?
  • 是的,我完全同意这一点。但是,问题并不清楚,因此集中在有问题的正则表达式上。
  • @SteveEdson 你真的拯救了我的一天 :) 完美无瑕!谷歌搜索并尝试了很多使其工作。但是正则表达式并不是最容易学习的东西。是的,这是一次性的工作。一个需要适当清理的旧“杂乱”网站。但手动操作是不可能的(1600 多页)。非常感谢:)
  • @wp78de 我已将 img 标签放在单独的组中 (]+>)(]+>)( ) 谢谢:)
  • @PeterPoortinga 如果答案帮助您解决了问题,请点赞/接受。
猜你喜欢
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 2010-10-23
  • 2018-09-13
相关资源
最近更新 更多