Regex kalıpları uygulanmadan kaçabilecek bir PHP işlevi var mı?
C # Regex.Escape()işlevi satırları boyunca bir şey arıyorum .
Regex kalıpları uygulanmadan kaçabilecek bir PHP işlevi var mı?
C # Regex.Escape()işlevi satırları boyunca bir şey arıyorum .
Yanıtlar:
preg_quote() aradığınız şey:
Açıklama
string preg_quote ( string $str [, string $delimiter = NULL ] )preg_quote () alır
strve düzenli ifade sözdizimi bir parçası olan her karakterin önüne bir ters eğik çizgi koyar. Bazı metinde eşleştirmeniz gereken bir çalışma zamanı dizeniz varsa ve dize özel normal ifade karakterleri içeriyorsa bu yararlıdır.Özel normal ifade karakterleri:
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -Parametreler
str
Giriş dizesi.
sınırlayıcı
İsteğe bağlı sınırlayıcı belirtilirse, bu değerden de kaçılır. Bu, PCRE işlevleri için gerekli olan sınırlayıcıdan kaçmak için kullanışlıdır. / En sık kullanılan sınırlayıcıdır.
Önemli olarak, $delimiterbağımsız değişken belirtilmezse, regex'inizi, genellikle eğik çizgiyi ( ) içine almak için kullanılan karakter olan ayırıcıdan çıkılmayacağını unutmayın /. Genellikle $delimiterargümanınız olarak normal ifadenizle kullandığınız sınırlayıcıyı geçmek istersiniz .
preg_matchboşlukla çevrili belirli bir URL'nin oluşumlarını bulmak için kullanma :$url = 'http://stackoverflow.com/questions?sort=newest';
// preg_quote escapes the dot, question mark and equals sign in the URL (by
// default) as well as all the forward slashes (because we pass '/' as the
// $delimiter argument).
$escapedUrl = preg_quote($url, '/');
// We enclose our regex in '/' characters here - the same delimiter we passed
// to preg_quote
$regex = '/\s' . $escapedUrl . '\s/';
// $regex is now: /\shttp\:\/\/stackoverflow\.com\/questions\?sort\=newest\s/
$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";
preg_match($regex, $haystack, $matches);
var_dump($matches);
// array(1) {
// [0]=>
// string(48) " http://stackoverflow.com/questions?sort=newest "
// }
$delimiterargümanın önemi , dokümanlardaki bu argümanın açıklaması, tam olarak ne anlama geldiği hakkında karışıklık için bir açıklama ve yoğun bir şekilde ortaya çıkan not preg_quoteen basit durumda kullanıldığını gösteren yorumlanmış bir örnek , aslında bir regex oluşturmak ve başka bir preg_*işleve koymak için kullanıldığı yerde ortaya çıkabilir (aksi takdirde, amaç nedir?). Değişikliği beğenmezseniz geri dönmekten çekinmeyin.
Kullanımı çok daha güvenli olacağını Hazırlanan Kalıpları gelen T-RegX kütüphanesinde :
$url = 'http://stackoverflow.com/questions?sort=newest';
$pattern = Pattern::prepare(['\s', [$url], '\s']);
// ↑ $url is quoted
sonra normal t-regx eşleşmesini gerçekleştirin:
$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";
$matches = $pattern->match($haystack)->all();
$delimiterargümanı belirtmezseniz,preg_quote()herhangi bir sınırlayıcıdan kaçmaz , "varsayılan" (veya en yaygın) bile/.