VBscript正则表达式替换

4

我不知道为什么这只适用于找到的最后一个实例,而不是我期望的所有实例。需要任何帮助。

输入字符串:

<a href="http://www.scirra.com" target="_blank" rel="nofollow">http://www.scirra.com</a><br /><br />
<a href="http://www.scirra.com" target="_blank" rel="nofollow">http://www.scirra.com</a><br /><hr>

正则表达式:

'SEO scirra links
Dim regEx
Set regEx = New RegExp

' BB code urls
With regEx
    .Pattern = "<a href=\""http://www.scirra.com([^\]]+)\"" target=\""_blank\"" rel=\""nofollow\"">"
    .IgnoreCase = True
    .Global = True
    .MultiLine = True
End With
strMessage = regEx.Replace(strMessage, "<a href=""http://www.scirra.com$1"" target=""_blank"" title=""Some value insert here"">")

set regEx = nothing

输出:

<a href="http://www.scirra.com" target="_blank" rel="nofollow">http://www.scirra.com</a><br /><br />
<a href="http://www.scirra.com" target="_blank" title="Some value insert here">http://www.scirra.com</a><br /><hr>

有人能解释一下为什么它只将标题添加到最后一个找到的实例中吗?(我已经测试过更多,始终只适用于最后一个实例)
1个回答

7

这是因为在您的正则表达式中:

...a.com-->([^\]]+)<--

您需要尝试匹配输入中不是]的所有内容(一个或多个)。由于输入中根本没有],因此它会吞咽一切(甚至包括换行符),但必须回溯以满足您的正则表达式的其余部分,这意味着它会回溯到最后一个出现的"target="_blank" ...
如果您想替换rel="nofollow"并允许http://www.scirra.com后面的任何路径,请改用以下正则表达式:
(<a href="http://www\.scirra\.com((/[^/"]+)*/?)" target="_blank" )rel="nofollow">

并将其替换为:

$1title="Some value insert here">

复制/粘贴您当前的代码:

Dim regEx
Set regEx = New RegExp

' BB code urls
With regEx
    .Pattern = "(<a href=""http://www\.scirra\.com((/[^""/]+)*/?)"" target=\""_blank\"" )rel=\""nofollow\"">"
    .IgnoreCase = True
    .Global = True
    .MultiLine = True
End With
strMessage = regEx.Replace(strMessage, "$1title=""Some value insert here"">")

请注意,在替换的URL中,这是相当受限制的。例如,目标内容可能是其他内容,或者可能有更多的属性?

这是我对论坛进行的修改,我正在剥离站点内部发布链接上的nofollow属性,并添加标题属性。 - Tom Gullen
哦,我明白了...好的,稍等,我将会写出那个正则表达式。 - fge
请看编辑后的答案。不过请注意最后一段:你的正则表达式可能需要更多的工作。我很好奇你是如何想到使用 ([^]]+) 的? - fge
谢谢,太棒了!但是我需要在scirra.com模式的结尾添加什么内容才能匹配任何以scirra.com开头的URL呢?例如,这个模式无法匹配http://www.scirra.com/blog,这也是我在正则表达式中遇到困难的部分。 - Tom Gullen
不用了,我找到了!在“.com”后面加上“(/[^\s]*)?”似乎非常好用。感谢您的帮助,非常感激! - Tom Gullen
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接