Neden bu PHP regex bana hata veriyor?

5 Cevap php

Regex ile Bazı Yardım gerekir:

Ben değiştirmek istiyorum

[url=http://youtube.com]YouTube.com[/url]

ile

<a href="http://youtube.com">YouTube.com</a>

regex

preg_replace("/[url=(.*?)](.*?)[/url]/is", '<a href="$1">$2</a>', $text);

neden bu bana veriyor:

Warning: preg_replace() [function.preg-replace]: Unknown modifier 'r' in C:\Programa\wamp\www\func.php on line 18

5 Cevap

Eğer düzenli ifadede özel karakterler kaçmak gerekir:

preg_replace('/\[url=(.*?)](.*?)\[\/url]/is', '<a href="$1">$2</a>', $text);

Ben [ karakterleri (bir karakter sınıfının başlangıç ​​belirtin) ve / karakteri kaçmış (bu düzenli ifadenin sınırlarını belirtir.)

Alternatif (/ karakter için) başka bir sınır karakteri kullanabilirsiniz:

preg_replace('#\[url=(.*?)](.*?)\[/url]#is', '<a href="$1">$2</a>', $text);

Ancak yine de, [ karakter kaçmak zorunda.

PHP /url regex sonu ve regex seçenekleri başlangıç ​​olarak içinde '/' yorumluyor. Bir '\' onu yapmak için önce bir literal '/' yerleştirin.

Sen '[' nin aynı şekilde (aksi takdirde bir karakter sınıfını tanıtan olarak yorumlanır) kaçmak gerekir.

preg_replace("/\[url=(.*?)](.*?)\[\/url]/is", '<a href="$1">$2</a>', $text);

Bölü ve köşeli parantez hem de regex özel karakterler, onları kaçmak için ihtiyacınız olacak:

\/ \[ \]

Regex dize 2 '/' regex biter. Bunu kaçmak gerekir. Siz de bu kaçmak gerekir böylece Ayrıca, preg_replace, bir karakter sınıfının olarak '[url = (. *?)]' Yorumlayacaktır.

preg_replace('/\[url=(.*?)\](.*?)\[\/url\]/is', '<a href="$1">$2</a>', $text);

Sadece düzenli ifadeler ile başlayan gibi görünüyor. Bu durumda - ya da belki o olmasa bile - Eğer the Regex Coach çok yararlı bir araç olarak bulacaksınız. Bize de bizim desen maçları ve bizim yerine dizeleri test etmek için bir kum havuzu sağlar. Eğer özel karakterleri kaçmak için gereğini vurgulanan olurdu kullanıyor olsaydı.