2009-08-30 4 views
0

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

+0

Обычно это используется для обратных ссылок. См.: http://www.regular-expressions.info/named.html – Mischa

ответ

0

От Mastering Regular Expressions:

Названного захват:

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

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

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

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

0

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


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» с любой комбинацией капиталоемких строчными букв, но только, если он предшествует другие «обув «с точно таким же набором маленьких маленьких букв. Вы также можете обратиться к своей группе, используя синтаксис match.Groups["name"], поэтому в этом примере match.Groups["foo"] вернет «foO».

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

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