Expression régulière trop gourmande ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Expression régulière trop gourmande ?

Re: Expression régulière trop gourmande ?

par Ryle » 09 févr. 2010, 12:25

Suffit d'adapter la règle de ooflorent :)

Il te propose de récupérer une chaine commençant par X, se terminant par Z et ne contenant ni X ni Z. Dans ton cas, il suffit d'identifier ce que ta chaine n'a pas le droit de contenir pour l'en excluse. Par exemple un crochet "<" que tu ne retrouvera jamais à l'intérieur d'un virtual host :
preg_match_all("#<VirtualHost xx.xx.xx.xx:80>([^<]+)Redirect 301 / http://www.monsite.fr\n</VirtualHost>#isU", $contenu, $bloc);

Re: Expression régulière trop gourmande ?

par ububy6 » 09 févr. 2010, 11:52

Merci pour cette réponse. En fait je pensais que la solution de l'exemple donné sur lequel je fais des essais aller résoudre le problème mais en fait non.

J'essaie de récupérer les redirections 301 d'un nom de domaine précis dans le fichier httpd.conf

Exemple :

Code : Tout sélectionner

<VirtualHost xx.xx.xx.xx:80> ServerAdmin [email protected] DocumentRoot /home/monsite/www SuexecUserGroup monsite users ServerName www.monsite.fr ServerAlias monsite.fr CustomLog logs/monsite-access_log combined ScriptAlias /cgi-bin/ /home/monsite/cgi-bin/ </VirtualHost> <VirtualHost xx.xx.xx.xx:80> ServerAlias monsite.com ServerAlias www.monsite.com Redirect 301 / http://www.monsite.fr </VirtualHost>
J'utilise cette expression régulière sans succès :

Code : Tout sélectionner

preg_match_all("#<VirtualHost xx.xx.xx.xx:80>(.+)Redirect 301 / http://www.monsite.fr\n</VirtualHost>#isU", $contenu, $bloc);
Il me récupère tout et non juste le dernier bloc qui m'intéresse. j'ai un peu de mal avec la solution donnée, j'ai regardé aussi du coté des assertions avant/arrières - positive/negative.

Quelqu'un aurait une solution?

Merci.

Re: Expression régulière trop gourmande ?

par ooflorent » 08 févr. 2010, 22:15

Tout simplement :

Code : Tout sélectionner

/X([^XZ]+)Z/

Expression régulière trop gourmande ?

par ububy6 » 08 févr. 2010, 19:30

Bonsoir,

Pour faire simple, j'aimerais extraire de cette chaine les portions commençant par X et terminant par Z. C'est un exemple, en pratique c'est un gros fichier avec des blocs à extraire.

Chaine : uuuXuuuXuuuXuuuZuuuXuuuZuuuXuuuZuu

Voici donc mon expression régulière :preg_match_all("#X(.+)Z#U", "uuuXuuuXuuuXuuuZuuuXuuuuZuuuXuuuuuZuu", $bloc);

En retour j'ai :

Array
(
[0] => Array
(
[0] => XuuuXuuuXuuuZ
[1] => XuuuuZ
[2] => XuuuuuZ
)

[1] => Array
(
[0] => uuuXuuuXuuu
[1] => uuuu
[2] => uuuuu
)

)

Pour le premier résultat retourné, il me prend le premier X qu'il rencontre. hors j'aimerais avoir le dernier X, celui qui est le plus proche du premier Z.

J'ai essayé ceci également sans succès : preg_match_all("#X(.+?)Z#", "uuuXuuuXuuuXuuuZuuuXuuuuZuuuXuuuuuZuu", $bloc);

Merci pour votre aide.