正则表达式模式匹配Href和删除

时间:2017-08-31 18:52:05

标签: regex regex-negation

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

正则表达式声明:

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

它匹配此语句中的href链接没有问题

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链接此语句:

<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>

我一直试图玩弄被忽视的角色而没有运气。如果我删除被忽略的字符集,最终会发生的是它将匹配两个相继的链接,例如示例2作为一个匹配。

4 个答案:

答案 0 :(得分:1)

使用仅匹配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

上尝试以上操作

答案 1 :(得分:0)

这里的问题是[^<]*>匹配到最后>之前的所有内容。这是*星号的贪婪行为。您可以通过在星号后添加?来使其变得非贪婪(您已在查询的其他部分中执行此操作)。然后它将匹配所有内容,直到第一次出现>。然后你必须改变你的正则表达式的中间部分即。在第一个标记</a>之前捕获所有内容:

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

答案 2 :(得分:0)

我正在使用以下正则表达式并且似乎正在运行:

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

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

答案 3 :(得分:0)

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

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