Прошу объяснить значение регулярного выражения

Bambino

Новичок
Прошу объяснить значение регулярного выражения

Есть вот такое регулярное выражение (пробелы сделаны мной для лучшей видимости). Само выражение работает с URL типа
2008/05/01/name.html и должно "вытягивать" год, месяц и день.

PHP:
'! ^/[0-9]{2} (?P<y>[0-9]{2}) (/ (?P<m>[0-9]{2}) (/ (?P<d>[0-9]{2}) )? )? !'
Пожалуйста объясните мне, если кто знает, смысл символов ?P<y>, ?P<m>, ?P<d>. Поиск по хелпу не дал результатов. Я не нашел подобных модификаторов в библиотеке PCRE.
 

alexcrown

Новичок
Это так называемые именнованные группы (named subpatterns). Они используются для более наглядного использования обратных ссылок и рекурсивных шаблонов.
В приведённом примере группы поименованы, но нигде не используются.
 

Bambino

Новичок
т.е. в принципе вот это ?P<y> можно убрать? Ну точнее не обращать внимания, если не используются? А можно пример, когда именнованные группы используются?
 

alexcrown

Новичок
На самом деле в твоём примере именованные группы используются, но немного не по прямому назначению. Функция preg_match_all возвращая массив найденных групп, добавляет туда их названия в качестве индексов. Т.е. в результирующем массиве кроме порядковых индексов будут еще и индексы 'y','m','d'. Очевидно это было сделано для удобства разработчика.

Если интересно, почитай тут про Back References и Recursive Patterns - там есть примеры использования именованных групп.
 
Сверху