VBscript регулярное выражение заменить - PullRequest
3 голосов
/ 14 января 2012

Понятия не имею, почему это относится только к последнему найденному экземпляру, а не ко всем, как я ожидал.Любая помощь приветствуется.

Входная строка:

<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 Ответ

6 голосов
/ 14 января 2012

Именно из-за этого в вашем регулярном выражении:

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

Вы пытаетесь сопоставить все, что не является ], один или несколько раз в вашем вводе. И поскольку на вашем входе вообще нет ], он проглатывает все (да, даже переводы строк), но должен вернуться назад, чтобы удовлетворить остальную часть вашего регулярного выражения, что означает, что он возвращается к last вхождение " 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 это довольно ограничительно. Например, есть ли вероятность, что целевой контент будет чем-то другим, или что есть больше атрибутов?

...