В чем разница между группой и соответствием в .NET RegEx? - PullRequest
5 голосов
/ 27 августа 2008

В чем разница между группой и совпадением в .NET RegEx?

Ответы [ 2 ]

6 голосов
/ 27 августа 2008

A Match - это объект, который указывает конкретное регулярное выражение, соответствующее (часть) целевому тексту. Group указывает часть совпадения, если исходное регулярное выражение содержало маркеры группы (в основном шаблон в скобках). Например, со следующим кодом:

string text = "One car red car blue car";
string pat = @"(\w+)\s+(car)";
Match m = r.Match(text);

m будет соответствовать объекту, который содержит две группы - группу 1 от (\w+), и которая захватила "Один", и группу 2 (от (car)), которая соответствует "ну" *

2 голосов
/ 27 августа 2008

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

Внутри совпадения вы можете определить группы, анонимные или именованные, чтобы упростить разбиение совпадения. Простой пример - создать регулярное выражение для поиска URL-адресов, а затем использовать группы внутри, чтобы найти протокол (http), домен (www.web.com), путь (/lol/cats.html) и аргументы, а что нет.

// Example I made up on the spot, probably doesn't work very well
"(?<protocol>\w+)://(?<domain>[^/]+)(?<path>/[^?])"

Как я уже говорил, один и тот же шаблон можно найти несколько раз внутри строки, поэтому если вы используете Regex.Matches (текст строки), вы получите несколько совпадений, каждое из которых состоит из нуля, одной или нескольких групп.

Эти именованные группы могут быть найдены либо путем индексации по номеру, либо по строке. Пример выше можно использовать так:

Match match = pattern.Match(urls);
if (!match.Success) 
    continue;
string protocol = match.Groups["protocol"].Value;
string domain = match.Groups[1].Value;

Чтобы сделать вещи еще более интересными, одну группу можно сопоставить несколько раз, но тогда я рекомендую начать читать документацию .

Вы также можете использовать группы для генерации обратных ссылок, а также для частичного поиска и замены, но об этом читайте в MSDN .

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