Почему Regex.Match возвращает только 1 результат? - PullRequest
3 голосов
/ 22 ноября 2008

Я использую регулярное выражение, которое удаляет теги href из HTML-документа , сохраненного в строку. Следующий код показывает, как я использую его в своем консольном приложении C #.

Match m = Regex.Match(htmlSourceString, "href=[\\\"\\\'](http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?[\\\"\\\']");

        if (m.Success)
        {
            Console.WriteLine("values = " + m);
        }

Однако он возвращает только один результат вместо списка всех тегов href на html-странице. Я знаю, что это работает, потому что когда я пытаюсь RegexOptions.RightToLeft, он возвращает последний тег href в строке.

Есть ли в моем утверждении if что-то, что не позволяет мне вернуть все результаты?

Ответы [ 2 ]

17 голосов
/ 22 ноября 2008

Match метод ищет первое вхождение строки, Matches метод ищет все вхождения.

2 голосов
/ 24 ноября 2008

Если вы используете Match вместо Match es , вам нужно использовать цикл для получения всех совпадений, вызывающих m.NextMatch () в конце каждого цикла. Например:

    Match m = Regex.Match(htmlSourceString, "href=[\\\"\\\'](http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?[\\\"\\\']");
    Console.Write("values = ");
    while (m.Success) 
    { 
        Console.Write(m.Value);
        Console.Write(", "); // Delimiter
        m = m.NextMatch();
    }
    Console.WriteLine();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...