Mon preg_match est-il correcte syntaxiquement ?!

WRInaute accro
Bonjour,

Je souhaiterais savoir si mon preg_match est syntaxiquement correcte ?

Code:
echo preg_match('`^\/index\.php.*$`iU', $_SERVER['REQUEST_URI']);
Il est fonctionne, mais d'autre foncitonne également, je vous les mettrais ci-dessous.
Le but de cette expression régulière est de trouver dans REQUEST_URI, /index.php et derrière cela, il peut se trouver n'importe quoi...

Cela fonctionne, mais je ne suis pas certain que c'est bon ! :?

Ces autres syntaxe fonctionne également:
Code:
echo preg_match('`^/index.php.*$`iU', $_SERVER['REQUEST_URI']);
Code:
echo preg_match('`^/index\.php.*$`iU', $_SERVER['REQUEST_URI']);
Code:
echo preg_match('`^\/index.php.*$`iU', $_SERVER['REQUEST_URI']);
La différence est au niveau des "\".

Merci de votre aide.
 
WRInaute accro
smrhp a dit:
ben si ça fonctionne où est le problème ?? ;)
Peut être n'ai je pas prévu un cas, qui peut être source de problème.
D'où mon interrogation.

Je ne me limite pas à :
"Ca marche...super...je ne sais pas comment et pourquoi les trois solutions fonctionnent...mais ça marche !"
 
WRInaute discret
ben disons qu'avec ".*" je ne vois pas trop comment tu pourrais avoir oublié de cas ;)

après garder le caractère d'échappement "\" c'est sûrement mieux. le tout en insensible à la casse j'ai l'impression que ... hormis bien sûr s'il n'ya pas index.php dans l'url ;)
 
WRInaute accro
smrhp a dit:
ben disons qu'avec ".*" je ne vois pas trop comment tu pourrais avoir oublié de cas ;)

après garder le caractère d'échappement "" c'est sûrement mieux. le tout en insensible à la casse j'ai l'impression que ... hormis bien sûr s'il n'ya pas index.php dans l'url ;)
Tu as l'impression que ?

Et pourquoi cela fonctionne avec ou sans "\" ?
 
WRInaute discret
j'ai l'impression que ça couvre tout ;) (oublié la fin de la phrase en effet ;) )

pour le point je dirais que le "." voulant dire n'importe quel caractère ça fonctionne car un "." est justement un n'importe quel caractère ;)... Donc ça fonctionnerait aussi avec indexwphp (s'il n'y a pas le caractère échappement... ta 3ème proposition).

et pour le premier "/" n'étant en fait pas un métacaractère, le "\" n'est pas utile... Mais "\/" n'ayant pas d'autre signification (comme \b par exemple), le "/" devient un appel "litéral" à "/" donc équivalent...

donc la bonne serait sûrement plutôt :
Code:
echo preg_match('`^/index\.php.*$`iU', $_SERVER['REQUEST_URI']);

pour être "nickel" ;)
 
WRInaute discret
thierry8 a dit:
Bonjour,

Je souhaiterais savoir si mon preg_match est syntaxiquement correcte ?

Code:
echo preg_match('`^\/index\.php.*$`iU', $_SERVER['REQUEST_URI']);
Il est fonctionne, mais d'autre foncitonne également, je vous les mettrais ci-dessous.
Le but de cette expression régulière est de trouver dans REQUEST_URI, /index.php et derrière cela, il peut se trouver n'importe quoi...

Cela fonctionne, mais je ne suis pas certain que c'est bon ! :?

Ces autres syntaxe fonctionne également:
Code:
echo preg_match('`^/index.php.*$`iU', $_SERVER['REQUEST_URI']);
Code:
echo preg_match('`^/index\.php.*$`iU', $_SERVER['REQUEST_URI']);
Code:
echo preg_match('`^\/index.php.*$`iU', $_SERVER['REQUEST_URI']);
La différence est au niveau des "\".

Merci de votre aide.

Alors en lisant ton code, je dirais que la difference entre la 1 et la 4 c'est que avec la 4 : "index1php.php" var etre considere comme faisant parti de la chaine, alors que la regle 1 le reconnaitra pas.
Tout simplement car dans la regle 1, tu echapes le "." et donc ca doit etre un point qui separe index et php , alors que dans la regle 4 tu n'echapes pas le . donc ca peut etre n'importe quel caratere entre index et php

C'est la meme chose entre la regle 2 et 3.

Apres la difference entre le couple 2,3 et 1,4 c'est juste un echapement non necessaire il me semble
 
Discussions similaires
Haut