用于匹配 Href 并删除的正则表达式模式

Regex Pattern to Match A Href and Remove

我正在尝试创建一个正则表达式来匹配所有包含我的域的 href link,我将最终删除 link。它工作正常,直到我 运行 进入一个 href link,它在标签中有另一个 HTML 标签。

正则表达式语句:

(<a[^<]*coreyjansen\.com[^<]*>)([^"]*?)(<\/a>)

匹配这个语句中的a href link没有问题

Need a lawyer? Contact <span style="color: #000000"><a 
href="http://coreyjansen.com/">Random text is great</a> <a 
href="http://coreyjansen.com/practice/family/">Corey is awesome</a></span>

它无法匹配两个 href link 这条语句:

<strong><a href="http://coreyjansen.com/"><img class="alignright size-full 
wp-image-12" src="http://50h0.com/wp-content/uploads/2014/06/lawyers.jpg" 
alt="lawyers" width="250" height="250" /></a>

我一直在尝试玩被忽视的角色集,但没有运气。如果我删除被忽略的字符集,最终发生的是它将匹配两个紧接着的 links,例如示例 2 作为一个匹配项。

这里的问题是 [^<]*> 匹配所有内容直到最后 >。这就是 * 星号的贪婪行为。您可以通过在星号后附加 ? 使其成为非贪婪的(您已经在查询的其他部分中这样做了)。然后它将匹配所有内容,直到第一次出现 >。然后你也必须改变你的正则表达式的中间部分,即。像这样捕捉第一个标签 </a> 之前的所有内容:

(<a[^<]*coreyjansen\.com[^<]*?>)(.*?)(<\/a>)

我正在使用以下正则表达式,它似乎可以正常工作:

<a.*coreyjansen\.com.*</a>

它捕获包含您网站名称的锚标记之间的任何内容。我正在使用来自 www.regexpal.com 的 javascript 模式匹配,具体取决于语言,它可能会略有不同

使用下面仅匹配 a 标签的正则表达式

(<a[^>]*coreyjansen\.com[^>]*>)

示例数据

<strong><a href="http://coreyjansen.com/"><img class="alignright size-full 
wp-image-12" src="http://50h0.com/wp-content/uploads/2014/06/lawyers.jpg" 
alt="lawyers" width="250" height="250" /><a href="http://coreyjansen.com/"><a href="http://coreyjansen.com/"/></a>

以上正则表达式会将所有三个 a 标记与您所需的域匹配。

regex

上试试上面的方法

您需要匹配标记 <a 的开头,然后匹配 > 字符之前的地址。您正在匹配错误的字符。当你匹配它时,<a></a> 之间的所有内容都会显示 link。我不知道为什么你比较不包含引号,每个标签属性(在 HTML5 中)在引号内都有值,所以你需要匹配除了 link 结束标签 </a> 之外的所有内容。它由 ((?!string to not match).)* 完成,之后应该遵循 </a>。结果正则表达式是:

(<a[^>]*coreyjansen\.com[^>]*>)((?!<\/a>).)*(<\/a>)