Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как получить именной параметр в RegExp?


Автор: Kotakota 5.4.2011, 08:30
Привет.

Есть регулярное выражение:
products\/([a-z]+)\/(\d+)'=>'$1/id_$2'

Здесь все понятно. То, что сохранено у нас в круглых скобках это $1 и $2

Теперь преобразуем регулярное выражение используя именованные параметры:
products\/([a-z]+)\/(?P<tictac>\d+)'=>'$1/id_КАК ЗДЕСЬ ПОДСТАВИТЬ значение <TICTAC>'

Автор: ksnk 5.4.2011, 09:42
(тут был бред)

Автор: skyboy 5.4.2011, 10:17
http://ua.php.net/manual/en/regexp.reference.back-references.php
Цитата

Back references to the named subpatterns can be achieved by (?P=name) or, since PHP 5.2.2, also by \k<name> or \k'name'. Additionally PHP 5.2.4 added support for \k{name} and \g{name}. 

Автор: Kotakota 5.4.2011, 10:57
Цитата(skyboy @ 5.4.2011,  10:17)
http://ua.php.net/manual/en/regexp.reference.back-references.php
Цитата

Back references to the named subpatterns can be achieved by (?P=name) or, since PHP 5.2.2, also by \k<name> or \k'name'. Additionally PHP 5.2.4 added support for \k{name} and \g{name}. 

products\/([a-z]+)\/(?P<tictac>\d+)'=>'$1/id_\k{tictac}
и
products\/([a-z]+)\/(?P<tictac>\d+)'=>'$1/id_\g{tictac}
и
products\/([a-z]+)\/(?P<tictac>\d+)'=>'$1/id_(?P=tictac)

Значение не подставляется... Просто выводится как текст...
 smile

Добавлено @ 10:58
Цитата(ksnk @ 5.4.2011,  09:42)
(тут был бред)

Хорошо, что был...

Автор: skyboy 5.4.2011, 14:36
Цитата(Kotakota @  5.4.2011,  09:57 Найти цитируемый пост)
Значение не подставляется... Просто выводится как текст...

а почему ты имя объявляешь с "уголками":
Цитата(Kotakota @  5.4.2011,  09:57 Найти цитируемый пост)
(?P<tictac>

а при обращении не используешь их:
Цитата(Kotakota @  5.4.2011,  09:57 Найти цитируемый пост)
(?P=tictac)

?

Автор: Kotakota 6.4.2011, 07:50
Цитата(skyboy @ 5.4.2011,  14:36)
Цитата(Kotakota @  5.4.2011,  09:57 Найти цитируемый пост)
Значение не подставляется... Просто выводится как текст...

а почему ты имя объявляешь с "уголками":
Цитата(Kotakota @  5.4.2011,  09:57 Найти цитируемый пост)
(?P<tictac>

а при обращении не используешь их:
Цитата(Kotakota @  5.4.2011,  09:57 Найти цитируемый пост)
(?P=tictac)

?

products\/([a-z]+)\/(?P<tictac>\d+)'=>'$1/id_(?P=<tictac>)

на выходе

$1/id_(?P=)

Подстановки не происходит.

Автор: skyboy 6.4.2011, 08:14
я был слишком самоуверен.
никогда не использовал сию фишку, но был уверен, что она работает целиком и полностью.
но, похоже, именованные группы http://www.php.net/manual/en/function.preg-replace.php#100048 в секции "Найти", но не в "Заменить" :(
Какой облом.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)