2015-10-30 8 views
5

PHP'de düzenli bir ifadede kullanmak için bir dizeden kaçmaya çalışıyorum. Şimdiye kadar denedim:PHP'de düzenli ifadede kullanmak için bir dizeden düzgün bir şekilde nasıl kaçınılır?

preg_quote(addslashes($string)); 

Ben düzgün dizede hiçbir tırnak hesaba katmak amacıyla addslashes ihtiyaç düşündüm. Sonra preg_quote düzenli ifade karakterlerinden kaçar. Bununla birlikte, sorun, tırnakların ters eğik çizgi ile, örn. \'. Ancak , ters eğik çizgi ile başka bir örn. \\'. Yani bu, alıntıyı bir kez daha açığa çıkardı. İki işlevi değiştirmek de işe yaramıyor, çünkü bu daha sonra özel bir düzenli ifade karakteri olarak yorumlanan bir unscaped ters eğik bırakacaktır.

Görevi tamamlamak için PHP'de bir işlev var mı? Ya da biri nasıl yapar?

+0

Düzeninizin nerede? Bunu da gönderin –

+0

Oh, problemin kullandığım gerçek regex'ten bağımsız olduğunu düşündüm. Şu anda '\ (? I) (? <=^| [^ A-z]) 'ı kullanmaya çalışıyorum. Preg_quote (addslashes ($ string)).' \ I 'çalışmıyor. – Daniel

+4

Sınırlayıcılarınız yanlış, bunun yerine eğik çizgi veya tildes kullanın. addslash'ler işe yaramaz. 'Preg_quote' ikinci parametresini kullanın. '(? <=^| [^ A-z])' nin '(?

cevap

0

Uygun yöntem preg_quote kullanmak ve kullanılan pattern delimiter belirtin.

preg_quote() str alır ve düzenli ifade sözdizimi bir parçası olan her karakterin önüne bir ters eğik çizgi koyar ... karakterlerdir: sınırlayıcı bir olduğu gibi . \ + * ? [^] $ () { } = ! < > | : -

ters eğik çizgi kullanmaya çalışıyor kötü bir fikir. Genellikle bir karakter seçersiniz, bu desende kullanılmaz. Yaygın olarak kullanılan çizgi/pattern/, ~pattern~ tilde, sayı işareti#pattern# veya yüzde işareti%pattern% olduğunu. Aynı zamanda, parantez stili sınırlayıcılarını kullanmak da mümkündür: @CasimiretHippolyte ve @anubhava tarafından yapılan yorumlarda belirtilen değişiklikle ilgili ifadeniz ile rejeksiniz (pattern) .

$pattern = '/(?<![a-z])' . preg_quote($string, "/") . '/i'; 

Belki \b word boundary kullanmak istedi. Ek kaçışa gerek yok.