Помогите понять шаблоны имен Regex - PullRequest
0 голосов
/ 30 августа 2009

Я пытаюсь понять, как (? шаблон) работает в Regex. Есть хорошая ссылка или кто-то может предложить простое объяснение?

Ответы [ 2 ]

0 голосов
/ 30 августа 2009

Эта функциональность дает вам возможность легко ссылаться на то, что вы поймали из кода (см. Пример) или из самого регулярного выражения, используя понятное имя вместо индекса. Простой пример:


Regex regex = new Regex(@"(?<foo>[fF][oO][oO]) \k<foo>");

foreach (Match match in regex.Matches("bar fOO foO foO f0O"))
{
    Console.WriteLine(match);
}

Печать

foO foO

Это регулярное выражение позволяет вам поймать "foo" с любой комбинацией заглавных букв, но только если ему предшествует другой "foo" с точно таким же набором заглавных букв. Вы также можете обращаться к своей группе, используя синтаксис match.Groups["name"], поэтому в этом примере match.Groups["foo"] вернет "foO".

Редактировать: Новый пример, который будет использовать синтаксис \ k .

0 голосов
/ 30 августа 2009

С Освоение регулярных выражений :

Именованный захват:

\b(?<Area>\d\d\d\)-(?<Exch>\d\d\d)-(?<Num>\d\d\d\d)\b

Это «заполняет имена» Area, Exch и Num компонентами телефонного номера США. Затем программа может ссылаться на каждую совпавшую подстроку через свое имя, например, RegexObj.Groups ("Area") в VB.NET и большинстве других языков .NET, RegexObj.Groups ["Area"] в C #, RegexObj.group ( «Площадь») в Python и $ соответствует [«Область»] в PHP. Результат - более понятный код.

Внутри самого регулярного выражения захваченный текст доступен через \ k с .NET и (? P = Area) в Python и PHP.

В Python и .NET (но не в PHP) вы можете использовать одно и то же имя более одного раза в одном выражении.

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