Великолепным и весьма полезным дополнением в PCRE является концепция именованных захватываемых групп (которые чаще называют имешюанными шаблонами). Такие группы позволяют вам обращаться к подшаблонам вашего выражения по произвольному имени вместо обращения но номеру позиции внутри регулярного выражения. Например, рассмотрим следующее регулярное выражение: /ЛЫате=(.+)$/
Теперь вы должны нормально обращаться к подшаблону (.+) как к первому элементу массива совпадений, возвращенного функцией preg_match () (или как $1 в подстановке, выполненной через вызов preg_replace () либо preg_replace_all ()).
Это все хорошо — по крайней мере, до тех пор, пока у вас есть только ограниченное число подшаблонов, чьи позиции никогда не изменяются. Однако не удастся найти подстроку в позиции, которую нужно добавить к захватываемому подшаблону в начале регулярного выражения, уже содержащего шесть таких подстрок.
К счастью, эта проблема может быть решена раз и навсегда присвоением "имени" каждому подшаблону. Рассмотрим следующий шаблон:
/AName=(? P<thename>. +)$/
Это создаст обратную ссылку внутри вашего выражения, которая может быть явно извлечена по имени thename. Если вы пропустите это выражение через функцию pregjnatch (), обратная ссылка будет вставлена в массив соответствий — как по номеру (с применением обычных правил нумерации), так и по имени. Если же, с другой стороны, вы пропустите его через preg_replace О , то можете обратиться к нему, за-
ключив в скобки и снабдив префиксом ?Р=. Например: preg_replace ("/AName=(?P<thename>.+)$/", "My name is (?P=thename)", $value);
Вы можете сами придумать пример использования этой функциональности.
|