2013-08-28 2 views
0

Я использую следующее Regex (которое я нашел онлайн) для получения URL-адресов на странице HTML;Regex для получения url из HTML

 Regex regex = new Regex(@"url\((?<char>['""])?(?<url>.*?)\k<char>?\)"); 

Прекрасно работает для HTML ниже;

<div style="background:url(images/logo.png) no-repeat;">UK</div> 

Однако возвращает больше, чем мне нужно, когда страница HTML содержит следующий Javascript, возвращая «destpage»

function buildurl(destpage) 

Я попробовал следующее регулярное выражение, чтобы включить двоеточие, но это, кажется, недействителен

:url\((?<char>['""])?(?<:url>.*?)\k<char>?\) 

Любая помощь будет высоко оценена.

+3

http://stackoverflow.com/a/1732454/1043380 Прекратить использование Regex для разбора html. Используйте более подходящий инструмент. – gunr2171

+1

Попробуйте использовать '\ b' (границу слова) вместо двоеточия. – Jerry

+0

@Jerry Добавление \ b вокруг url, казалось, делало трюк. ура – saj

ответ

3

Чтобы получить все URL-адреса, используйте HtmlAgilityPack вместо Regex. С их примером страницы

HtmlDocument doc = new HtmlDocument(); 
doc.Load("file.htm"); 
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"]) 
{ 

} 

Вы можете расширить, что для получения ваших URLs стиля, например, с помощью //@style, чтобы получить style узлов и перебирая те, чтобы извлечь значение url.

0

только добавить двоеточие на фронт:

:url\((?<char>['""])?(?<url>.*?)\k<char>?\) 

Второй «url» это имя этой группы.

Смежные вопросы