PHP preg_replace неожиданно ведет себя с '$' в теме

0

У меня есть следующий код:

echo preg_replace("/test/","$1000","this is a test");

Я ожидаю, что это будет напечатано: "это 1000 долларов", но вместо этого я получаю "это sa 00".

Это упрощенный пример, который указывает на проблему, с которой я столкнулся в настоящий момент. В этом случае я не могу использовать str_replace. Я также не могу заменить "$" на "$ # 36", в моем программировании есть рекурсивная функциональность, которая зависит от "$", чтобы остаться "$" и "$ 36", чтобы остаться "$ 36" ".

Теги:
preg-replace

2 ответа

2
Лучший ответ

В заменяющей строке $ используется запись обратных ссылок для групп захвата, поэтому вам нужно ее избежать.

echo preg_replace("/test/","\\$1000","this is a test");

в исходном коде $10 был интерпретирован как обратная ссылка на группу захвата номер 10 (которая не существует). Поскольку число обратных ссылок ограничено 99, учитываются только две первые цифры.

1

$1 - это обратная ссылка на подшаблон захвата, то есть все, что фиксируется скобками. $0 ссылается на совпадающую строку, $1 является первой, сопоставляемой скобками и т.д. У вас нет скобок, которые будут скопированы, поэтому она пуста.

http://php.net/manual/en/regexp.reference.back-references.php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню