用于匹配 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>)
我正在尝试创建一个正则表达式来匹配所有包含我的域的 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>)