PHPFrance

Discuter de tout ce qui touche au PHP, en français.

Vers le contenu

» Masquer les résultats de la recherche

Recherche dynamique PHPfrance

  1. Effectuez une recherche, les résultats s'afficheront dynamiquement ici.

Expression régulière trop gourmande ?

Pour ceux qui débutent en PHP.

Expression régulière trop gourmande ?

Messagede ububy6 le 08 Fév 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.
ububy6
Embryon
 
Messages: 2
Inscription: 08 Fév 2010, 19:22

Publicité

Re: Expression régulière trop gourmande ?

Messagede ooflorent le 08 Fév 2010, 22:15

Tout simplement :
/X([^XZ]+)Z/
ooflorent
Maitre du phpinfo()
 
Messages: 63
Inscription: 09 Jan 2010, 14:11
Localisation: Toulouse

Re: Expression régulière trop gourmande ?

Messagede ububy6 le 09 Fév 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 :

<VirtualHost xx.xx.xx.xx:80>
   ServerAdmin webmaster@monsite.fr
   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 :

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.
ububy6
Embryon
 
Messages: 2
Inscription: 08 Fév 2010, 19:22

Re: Expression régulière trop gourmande ?

Messagede Ryle le 09 Fév 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 :

Syntaxe: [ Télécharger ] [ Masquer ]
Code php
preg_match_all("#<VirtualHost xx.xx.xx.xx:80>([^<]+)Redirect 301 / http://www.monsite.fr\n</VirtualHost>#isU", $contenu, $bloc);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...
Avatar de l’utilisateur
Ryle
Modérateur PHPfrance
Modérateur PHPfrance
 
Messages: 8136
Inscription: 07 Fév 2006, 17:25
Localisation: Lat: 48°89. Long: 2°30.


Retourner vers PHP débutant

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 8 invités

  • Publicité