2012-01-14 53 views
3

我不知道爲什麼這隻適用於找到的最後一個實例,不是我所期望的所有實例。任何幫助讚賞。VBscript正則表達式替換

輸入字符串:

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

誰能闡明瞭爲什麼只是將標題添加到上次找到的實例? (我有更多的測試,總是隻適用於最後一個)

回答

6

正是因爲這個在你的正則表達式:

...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"">") 

但請注意,這是曲ite限制在被替換的URL中。例如,是否有目標內容可能是別的東西,還是有更多的屬性?

+0

謝謝!它的意思是匹配所有以http://www.scirra.com開頭的網址,剝離nofollow。我仍然努力工作,'http://www.scirra.com(。*)'不符合他們任何一個,我需要什麼? – 2012-01-14 02:10:15

+0

「剝離nofollow」?你什麼意思? – fge 2012-01-14 02:10:52

+0

這是我正在對論壇進行的一項修改,我正在剝離網站內部發布的鏈接的nofollow屬性以及添加標題屬性 – 2012-01-14 02:12:36