PHP preg_replace kullanarak: "Sınırlayıcı alfanümerik veya ters eğik çizgi olmamalıdır"

4 Cevap php

Ben şöyle bir metin dizesini almaya çalışıyorum:

$string = "This (1) is (2) my (3) example (4) text";

Parantez içinde bir pozitif tam sayı olduğu her durumda, ben sadece tamsayı kendisi ile değiştirmek istiyorum.

Ben şimdi kullanıyorum kodu:

$result = preg_replace("\((\d+)\)", "$0", $string);

Ama "Sınırlayıcı alfanümerik veya ters eğik çizgi olmamalıdır" hatası alıyorum.

Herhangi bir düşünce? Ben tür soru cevap burada başka sorular var biliyorum, ama regex bilgim bu örnek için geçiş için yeterli değildir.

4 Cevap

Neredeyse vardır. Kullandığınız:

$result = preg_replace("((\d+))", "$0", $string);
  • The regex you specify as the 1st argument to preg_* family of function should be delimited in pair of delimiters. Since you are not using any delimiters you get that error.
  • ( and ) are meta char in a regex, meaning they have special meaning. Since you want to match literal open parenthesis and close parenthesis, you need to escape them using a \. Anything following \ is treated literally.
  • You can capturing the integer correctly using \d+. But the captured integer will be in $1 and not $0. $0 will have the entire match, that is integer within parenthesis.

Tüm yukarıdaki değişiklikleri yaparsanız alırsınız:

$result = preg_replace("#\((\d+)\)#", "$1", $string);

Belgeleri kontrol - Eğer desen önce ve sonra bir sınırlayıcı kullanmak gerekir: "/\((\d+)\)/"

Ayrıca onlar değişmezleri değil, bir iç içe eşleşen grup olarak yukarıda dış parantez kaçmak isteyeceksiniz.

Bkz: preg_replace manual page

1) Bir delimeter olması gerekir, '/' çalışıyor.

2) Bunu başka bir gruplaşma olduğunu düşünmüyorum bu yüzden '(' ve ')' karakterleri kaçmak zorunda.

3) Ayrıca,) burada değişkenler yerine 1 başlar, değil 0 (0 parantez içerecek FULL metin maçı içerir.

$result = preg_replace("/\((\d+)\)/", "\\1", $string);

Böyle bir şey çalışması gerekir. Başka soru, PHP's preg_replace() Belgelerin gidin - bu gerçekten çok iyi.

Deneyin:

<?php
$string = "This (1) is (2) my (3) example (4) text";
$output = preg_replace('/\((\d)\)/i', '$1', $string);
echo $output;
?>

Parantez karakter normal ifadede özel karakter vardır. Sen bunları kullanmak için bunları kaçmak gerekir.