У меня есть следующий код:
echo preg_replace("/test/","$1000","this is a test");
Я ожидаю, что это будет напечатано: "это 1000 долларов", но вместо этого я получаю "это sa 00".
Это упрощенный пример, который указывает на проблему, с которой я столкнулся в настоящий момент. В этом случае я не могу использовать str_replace. Я также не могу заменить "$" на "$ # 36", в моем программировании есть рекурсивная функциональность, которая зависит от "$", чтобы остаться "$" и "$ 36", чтобы остаться "$ 36" ".
В заменяющей строке $ используется запись обратных ссылок для групп захвата, поэтому вам нужно ее избежать.
echo preg_replace("/test/","\\$1000","this is a test");
в исходном коде $10
был интерпретирован как обратная ссылка на группу захвата номер 10 (которая не существует). Поскольку число обратных ссылок ограничено 99, учитываются только две первые цифры.
$1
- это обратная ссылка на подшаблон захвата, то есть все, что фиксируется скобками. $0
ссылается на совпадающую строку, $1
является первой, сопоставляемой скобками и т.д. У вас нет скобок, которые будут скопированы, поэтому она пуста.
http://php.net/manual/en/regexp.reference.back-references.php