Использование регулярного выражения «не заканчивается на» для целей замены: как избежать замены последнего символа? - PullRequest
1 голос
/ 01 февраля 2010

Я использую следующее регулярное выражение

<a href="[^/]

чтобы найти все ссылки, которые не начинаются с косой черты. Я хочу использовать результат этого регулярного выражения для замены всех тегов <a href="somelink.html"> на что-то вроде <a href="http://mysite.com/somelink.html">.

Но проблема с моим регулярным выражением состоит в том, что (в приведенном выше примере) строка <a href="s заменяется вместо <a href=".

Как я могу исправить это регулярное выражение, чтобы избежать включения последнего символа в моем совпадении?

Для этого я использую библиотеку .Net Regex. В настоящее время со следующим кодом:

content = Regex.Replace(content, "(<a href=\")[^/]", "<a href=\"http://mysite.com/");

Может быть, я должен что-то там изменить? Но я бы предпочел иметь хорошее регулярное выражение, если это возможно, вместо того, чтобы начинать играть с SubString и т. Д.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2010

Не используйте регулярные выражения для анализа HTML. Используйте HTML Agility Pack . Это сделает вашу жизнь проще.

Если вы настаиваете на использовании регулярных выражений, попробуйте использовать негативный взгляд:

<a href="(?!/)
0 голосов
/ 01 февраля 2010

Если вам нужно использовать регулярное выражение, найдите в руководстве ссылку на предварительное утверждение или ее эквивалент. В Perl это (? = Шаблон), поэтому ваш шаблон становится

  <a href="(?=[^/])

Будет соответствовать, если за шаблоном следует [^ /], без включения его в совпадение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...