Текстовая переменная PHP preg_replace

Я хочу повторить строку с переменной внутри, включая ($), например:

echo "$string";

Я не хочу, чтобы он отображал переменную для строки, я хочу, чтобы он отображал саму строку «$ string», а не содержимое переменной. Я знаю, что могу сделать это, добавив '\' перед ($), но я хочу использовать для этого preg_replace. Я пробовал это, и это не работает:

$new = preg_replace("/\$/","\\$",$text);

person David    schedule 14.11.2009    source источник


Ответы (4)


Используйте одинарные кавычки для объявление строки:

echo '$string';

Переменные внутри одинарных кавычек не расширяются:

Примечание. В отличие от двух других синтаксисов, переменные и escape-последовательности для специальных символов не расширяются, если они встречаются в строки.

Другим решением было бы избежать $, как вы уже сделали в вызове preg_replace:

echo "\$string";
person Gumbo    schedule 14.11.2009

Если я правильно понял ваш вопрос, вы не можете использовать preg_replace, чтобы делать то, что хотите. preg_replace получает свои аргументы после подстановки переменных.

Таким образом, либо preg_replace нечего заменять (потому что замена уже произошла), либо preg_replace не нужно ничего делать (потому что знак доллара уже экранирован).

person Ben Karel    schedule 14.11.2009

Как вы заметили, $ обрабатывается для интерполяции переменных внутри строк с двойными кавычками. Таким образом, ваш шаблон регулярного выражения также должен быть построен с использованием строк с одинарными кавычками. Кроме того, $ является специальным символом внутри строки замены регулярных выражений, поэтому вам нужно дополнительно экранировать его:

preg_replace('/\$/', '\\\\$', $text)

Но здесь нет необходимости в функции preg_. str_replace должен сделать это:

str_replace('$', '\\$', $text)

Это может прояснить для вас ситуацию, но, как предлагает Гамбо: почему бы не использовать одинарные кавычки для эха?

person Bart Kiers    schedule 14.11.2009

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

 $foo = '123';  
 $bar = 'bqwe';                      
 $str= preg_replace("/".$foo ."/", '', $str, 1);
 $str= preg_replace("/".$bar ."/", '', $str, 1);
person Shivek Parmar    schedule 12.12.2013