Как работает такое выражение: PHP: $a='main/index/{page:\d+}'; $res=preg_replace('/{([a-z]+) : ([^\}]+)}/','(?P<\1>\2)', $a); if($res) { echo '<pre>'; var_dump($a); echo '</pre>'; echo'<hr>'; } die(); } что означает <\1>\2 ?
Я так понимаю что шаблон выбирает : 1) { - должно содержать фигурную скобку 2) ([a-z]+) любые символы в диапазоне a-z одна или более - выделить в группу 3) далее символ : 4) ([^\}]+) - группа символов одна или более, исключая символ } , \ перед } означает экранирование 5) должно содержать символ } и почему тогда если написать: PHP: $res=preg_match_all('/{([a-z]+) : ([^\}]+)}/',$a,$arr); if($res) { echo '<pre>'; var_dump($arr); echo '</pre>'; echo'<hr>'; } die(); } возвращает: array(3) { [0]=> array(1) { [0]=> string(10) "{page:\d+}" } [1]=> array(1) { [0]=> string(4) "page" } [2]=> array(1) { [0]=> string(3) "\d+" } } Хотя мне кажется должно было вернуть {page:\d+} Очень нужно знать - используется для роутов в mvc