PHP preg_replace metin değişkeni

4 Cevap php

Ben içeride şöyle ($) dahil değişkeni ile bir dize yankı istiyorum:

echo "$string";

Ben bunu '$ string' kendisi değil, bir değişkenin içeriğini yankı istiyorum, bu dize için değişken echo istemiyorum. Ben ($) önünde bir '\' ekleyerek bunu biliyorum, ama bunu yapmak için preg_replace kullanmak istiyorum. Bunu denedim ve çalışmıyor:

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

4 Cevap

Dizenizin beyanı için single quotes kullanın:

echo '$string';

Tek tırnak içindeki değişkenler genişletilmiş alamadım:

Note: diğer iki sözdizimlerinin aksine, variables ve özel karakterlerin öncelemleri olacak not be expanded when they occur in single quoted strings.

Başka bir çözüm $ zaten preg_replace çağrı içinde yaptığı gibi kaçmak olacaktır:

echo "\$string";

Sorunuzu doğru anlamak, preg_replace ne istediğinizi yapmak için kullanamazsınız. Değişken değişimi gerçekleştikten sonra preg_replace argümanlarını alır.

Yani (ikame zaten oluştu çünkü) preg_replace olarak değiştirin için bir şey yok, ya da (dolar işareti zaten kaçtı çünkü) preg_replace şey yapmaya gerek yok ya.

Eğer gözlemlediği gibi, $, çift tırnaklı dizge içinde değişken enterpolasyon için tedavi edilir. Yani regex desen de tek tırnakla kullanılarak inşa edilmelidir. Ayrıca, $ regex değiştirme dizesi içinde özel bir karakter, bu yüzden ekstra onu kaçmak gerekir:

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

Ama burada preg_ işlevi için gerek yoktur. str_replace bunu yapmak gerekir:

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

Bu sizin için şeyleri temizlemek, ama bamya anlaşılacağı gibi olabilir: neden echo için tek tırnak kullanmak değil mi?

Aslında sizi bazı değişkenler var metni kaldırmak istiyorum düşünüyorum. Sonra gibi yapabilirsiniz

 $foo = '123';  
 $bar = 'bqwe';                      
 $str= preg_replace("/".$foo ."/", '', $str, 1);
 $str= preg_replace("/".$bar ."/", '', $str, 1);