我正在尝试创建一个正则表达式来匹配包含我的域的所有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作为一个匹配。
答案 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
标记与您所需的域匹配。
答案 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>)