2012-01-14 5 views
3

私はこれがなぜ最後のインスタンスにしか適用されないのか分かりません。どんな助けもありがたい。VBscript regex replace

入力文字列:

<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-->([^\]]+)<-- 

あなたが1回以上、]ではないすべてのものを試してみて、一致して、入力してください。あなたの入力には全く]が存在しないので、それはすべて(たとえ改行さえも)を呑み込んでしまいますが、正規表現の残りの部分を満足させるためにバックトラックする必要があります。つまりの末尾にのバックトラックがあります。

あなたが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"">") 

ただし、これはqu置き換えられたURLでは制限があります。たとえば、ターゲットのコンテンツが他のものになっている可能性があるのですか、それとももっと属性がある可能性はありますか?

+0

Dohありがとう!これは、http://www.scirra.comで始まるすべてのURLを一致させ、nofollowを取り除くことを意味します。私はまだそれを稼働させるのに苦労しています。「http://www.scirra.com(。*)」はどちらにも一致しません。何が必要ですか? –

+0

"nofollowを外す"?どういう意味ですか? – fge

+0

それは私がフォーラムのnofollowアトリビュートを削除してサイトの内部にあり、タイトルアトリビュートを追加するフォーラムにしています –