php regex - заменить на "\ $ {1}" - PullRequest
       19

php regex - заменить на "\ $ {1}"

0 голосов
/ 23 марта 2010

нашел это регулярное выражение:

insert " " every 10 characters:  
$text =  preg_replace("|(.{10})|u", "\${1}"." ", $text);

Не могли бы вы, пожалуйста, объяснить, что означает \${1}.Почему используется \ и что означают фигурные скобки?

Ответы [ 2 ]

4 голосов
/ 23 марта 2010

Цитирование некоторых частей страницы руководства: preg_replace:

replacement может содержать ссылки вида \\n или $n, причем последняя форма является предпочтительной .

Вы, по-видимому, во втором случае: $n


А, позже:

При работе с шаблоном замены, когда за обратной ссылкой сразу следует другой номер (т. е. после размещения буквенного числа сразу после сопоставленного шаблона) , вы не можете использоватьзнакомая \\1 запись для вашей обратной ссылки.

\\11, например, может запутать preg_replace(), поскольку он не знает, хотите ли вы, чтобы обратная ссылка \\1 сопровождалась литералом 1 или обратной ссылкой \\11, за которой ничего не было.

В этом случае решение заключается в использовании \${1}1.Это создает изолированную $1 обратную ссылку, оставляя 1 в виде литерала.

Здесь у вас ничего нет после того, что будет $1 - но я полагаю, что это не повредитиспользовать нотацию \${1}: я считаю, что код легче читать, имея такие {};и это гарантирует, что вы не забудете добавить их в тот день, когда они нужны.

1 голос
/ 23 марта 2010

Первая фигурная скобка отвечает за подсчет символов..{10} означает: 10 раз любой символ.
\ $ {1} представляет все, что соответствует первой паре паратезов.Итак, перефразируя это: «Замените десять символов (.{10}) теми же 10 символами (\${1}) плюс пробел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...