C # регулярное выражение и HTML, конец на первом " - PullRequest
2 голосов
/ 10 ноября 2009

Я хочу получить URL из строки. Вот мой код для извлечения IMG URL.

        var imgReg = new Regex("img\\s*src\\s*=\\s*\"(.*)\"");
        string imgLink = imgReg.Match(page, l, r - l).Groups[1].Value;

Результат был

http://url.com/file.png" border="0" alt="

Как мне исправить это, чтобы оно заканчивалось на первом? "Я пробовал что-то вроде

        var imgReg = new Regex("img\\s*src\\s*=\\s*\"(.*[^\\\"])\"");

Но я получил те же результаты, что и оригинал.

Ответы [ 4 ]

4 голосов
/ 10 ноября 2009

Попробуйте это:

var imgReg = new Regex(@"img\s+src\s*=\s*""([^""']*)""");

Также обратите внимание на «\ s +» вместо «\ s *» после «img». Вам нужен хотя бы один пробел.

Вы также можете использовать не жадную (или «ленивую») версию оператора «звезда», которая вместо сопоставления с максимально возможным количеством будет соответствовать как можно меньше и останавливаться, как вам хотелось бы, при первом окончание цитаты:

var imgReg = new Regex(@"img\s+src\s*=\s*""(.*?)""");

(обратите внимание на «?» После «. *»)

3 голосов
/ 10 ноября 2009

Пожалуйста, рассмотрите возможность использования DOM (например, Html Agility Pack ) для анализа HTML вместо использования регулярных выражений. DOM должен обрабатывать все крайние случаи; регулярные выражения не будут.

1 голос
/ 10 ноября 2009

Ваш .* слишком жадный. Измените его на следующее, и оно выберет все до следующей двойной кавычки.

Source Text:  <img src="http://url.com/file.png" border="0" alt="" />
              <img src='http://url.com/file.png' border='0' alt='' />

RegEx:        <img\s*src\s*=\s*[\"\']([^\"\']+)[\"\']

Я только что изменил (.*) на ([^"]+). Это означает, что вы получите все символы без двойных кавычек до следующей части регулярного выражения. Он также поддерживает одинарные или двойные кавычки.

0 голосов
/ 10 ноября 2009

На мой взгляд, ваш (*.) Ловит двойные кавычки, с которыми вы не хотите совпадать.

Вы можете сделать "" ", чтобы найти двойную кавычку, или сделать что-то подобное для соответствия вашей ссылки

Соответствие (ввод, @ "http://(\w./)+.png");

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