Preg_replace kullanarak başka bir dize ile bir metin dizesini değiştirme

4 Cevap php

"- U [N] ew, [U] pdate veya [D] elete Eylem" preg_replace Ben çalışma alınamıyor kullanarak somhow ben ile değiştirmeniz gerekir Action - [N]ew, [U]pdate, or [D]elete : N bir dize var. Bu aynı kalır.

Benim kod gibi görünüyor

$action = Action - '[N]ew, [U]pdate, or [D]elete : U';
$line = preg_replace("/(Action - [N]ew, [U]pdate, or [D]elete : N)/",$action,$line);

4 Cevap

[ ve ] normal ifadelerde özel karakterlerdir. Siz onları eşleştirmek istiyorsanız onları kaçmak gerekir:

"/(Action - \[N\]ew, \[U\]pdate, or \[D\]elete : N)/"

Kaçtı, ve [ içinde ve ifade edilmeden ] içlerinde her karakterin bir maç olacak. Yani orijinal durumda, "[N]ew" uyan edildi "New". Böyle olsaydı, "[NP]ew", bu "New" veya "Pew" eşleşti olurdu.

Sen preg_replace bunu yapmak gerekmez. Basit bir str_replace yeterli olacaktır:

$action = 'Action - [N]ew, [U]pdate, or [D]elete : U';
$line = str_replace('Action - [N]ew, [U]pdate, or [D]elete : N', $action, $line);

Çift sorunlar:

1) Syntax error in your first line. Your quotes are misplaced. It should be:

 $action = "Action - [N]ew, [U]pdate, or [D]elete : N";

2) You need to escape the square brackets ([ ve ]) düzenli ifadelerde. Alternatif olarak, bunu yapabilirsiniz:

 $line = preg_replace("/N$/", "U", $action);

So combining them:

 $action = "Action - [N]ew, [U]pdate, or [D]elete : N";
 $line = preg_replace("/N$/", "U", $action);

kaçan deneyin '[' ve ']'