asp.net regex, чтобы найти якорные теги и заменить их URL - PullRequest
1 голос
/ 14 мая 2010

Я пытаюсь найти все теги привязки и добавляю значение href с помощью переменной. например

<a href="/page.aspx">link</a> will become <a href="/page.aspx?id=2">
<A hRef='http://www.google.com'><img src='pic.jpg'></a> will become <A hRef='http://www.google.com?id=2'><img src='pic.jpg'></a>

Я могу сопоставить все теги привязки и значения href с помощью regex, затем я вручную заменяю значения с помощью string.replace, однако я не думаю, что это эффективный способ сделать это. Есть ли решение, где я могу использовать что-то вроде regex.replace (html, newurlvalue)

Ответы [ 2 ]

3 голосов
/ 14 мая 2010

Да, вы можете. Применяется стандартное предупреждение - регулярные выражения недостаточно мощны, чтобы надежно анализировать html. Другими словами, это может на самом деле работать для вас в самых простых и контролируемых примерах, но во многих случаях это не получается.

Однако, если у вас уже написано регулярное выражение, вставьте его в Regex Hero вместе с вашим HTML, перейдите на вкладку «Заменить» и введите строку замены.

После того, как вы убедились, что он работает, нажмите Инструменты> Создать .NET Code, и вы получите ответ.

ОБНОВЛЕНИЕ: Итак, вот несовершенный пример этого в действии с использованием групп:

string strRegex = @"(?<=href="")(?<url>[^""]+)(?="")";
RegexOptions myRegexOptions = RegexOptions.IgnoreCase;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string strTargetString = @"<a href=""/page.aspx"">link</a> will become <a href=""/page.aspx?id=2"">" + (char)10 + "<A hRef='http://www.google.com'><img src='pic.jpg'></a> will become <A hRef='http://www.google.com?id=2'><img src='pic.jpg'></a>";
string strReplace = "http://mysite.com${url}";

return myRegex.Replace(strTargetString, strReplace);

http://regexhero.net/tester/?id=e993fbf1-acb7-4f59-af87-94253a6e8221

Часть (?<url>[^"]+) является именованной группой, на которую в строке замены можно ссылаться как ${url}.

ОБНОВЛЕНИЕ № 2:

Таким образом, чтобы соответствовать только URL без знака вопроса, вы должны сделать следующее:

(?<=href=")(?![^"]*\?)(?<url>[^"]+)(?=")

Часть (?![^"]*\?) является негативным взглядом, который добивается цели.

2 голосов
/ 14 мая 2010

Если вы анализируете HTML с помощью Regex, стандартный совет - вместо этого использовать HMTL Agility Pack .

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