Sen bir ters eğik çizgi ile dolar işareti kaçmak gerekir, \$
, aksi takdirde çizgi / dize sonu olarak yorumlanır.
Ayrıca, set ikinci parantez tamamen gereksizdir - Eğer yakalama grubunu kullanarak değil.
Oh, ve 100 $ gibi bir şey değiştirmekten kaçınmak için size Negatif Geriye İlerleme için 0-9 eklemek gerekir ... Bunu yapıyoruz çünkü, sadece karakter sınıfı içinde dolar yerleştirebilirsiniz ve kaçan gerekli değildir.
Yani bu noktada biz var:
$comments = preg_replace("/(?<![$0-9])[0-9]+/", "x", $comments);
Ama görünüşe göre "preg_replace bir görünüm arkasında repition desteklemiyor" - Seni Geriye İlerleme içinde 0-9 koyamazsınız demek alarak, bunun yerine daha önce bir kelime sınır koyarak kulüpler.
Ayrıca önlemek için bir şey 9,99 $ yerine, bu yüzden umarım biz \ d belirtebilirsiniz. Geriye bakan bu izin vermemek.
Yani kod sonunda olur:
$comments = preg_replace("/(?<!\$|\d\.)\b[0-9]+\b/", "x", $comments);
With all this added complexity, you'll want to create some test cases to make sure that works as intended.