Existe-t-il une fonction PHP qui peut échapper aux modèles d'expression régulière avant qu'ils ne soient appliqués?
Je recherche quelque chose du genre de la Regex.Escape()
fonction C # .
Existe-t-il une fonction PHP qui peut échapper aux modèles d'expression régulière avant qu'ils ne soient appliqués?
Je recherche quelque chose du genre de la Regex.Escape()
fonction C # .
Réponses:
preg_quote()
est ce que vous recherchez:
La description
string preg_quote ( string $str [, string $delimiter = NULL ] )
preg_quote () prend
str
et place une barre oblique inverse devant chaque caractère qui fait partie de la syntaxe des expressions régulières. Ceci est utile si vous avez une chaîne d'exécution que vous devez faire correspondre dans du texte et que la chaîne peut contenir des caractères regex spéciaux.Les caractères spéciaux des expressions régulières sont:
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
Paramètres
str
La chaîne d'entrée.
délimiteur
Si le délimiteur facultatif est spécifié, il sera également échappé. Ceci est utile pour échapper le délimiteur requis par les fonctions PCRE. Le / est le délimiteur le plus couramment utilisé.
Il est important de noter que si l' $delimiter
argument n'est pas spécifié, le délimiteur - le caractère utilisé pour entourer votre expression régulière, généralement une barre oblique ( /
) - ne sera pas échappé. Vous voudrez généralement passer le délimiteur que vous utilisez avec votre regex comme $delimiter
argument.
preg_match
pour rechercher des occurrences d'une URL donnée entourée d'espaces:$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
argument, la description de cet argument dans la documentation, une clarification pour les confus sur exactement ce que cela signifie, et une exemple commenté montrant qu'il preg_quote
est utilisé dans le cas le plus simple, je pourrais trouver où il est réellement utilisé pour former par programme un regex et le mettre dans une autre preg_*
fonction (car sinon, à quoi ça sert?). N'hésitez pas à revenir en arrière si vous n'aimez pas le changement.
Il serait beaucoup plus sûr d'utiliser les modèles préparés de la bibliothèque T-Regx :
$url = 'http://stackoverflow.com/questions?sort=newest';
$pattern = Pattern::prepare(['\s', [$url], '\s']);
// ↑ $url is quoted
puis effectuez une correspondance t-regx normale :
$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";
$matches = $pattern->match($haystack)->all();
$delimiter
argument,preg_quote()
il n'échappera à aucun délimiteur , pas même le "par défaut" (ou le plus courant)/
.