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
str
ve 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, $delimiter
bağı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 $delimiter
argümanınız olarak normal ifadenizle kullandığınız sınırlayıcıyı geçmek istersiniz .
preg_match
boş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 "
// }
$delimiter
argü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_quote
en 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();
$delimiter
argümanı belirtmezseniz,preg_quote()
herhangi bir sınırlayıcıdan kaçmaz , "varsayılan" (veya en yaygın) bile/
.