Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/06/2008, 16h00   #1
Invité de passage
 
Inscription : juin 2006
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 19
Points : 1
Points : 1
Par défaut scinder une chaine avec une regex

Bonjour,
J'ai une chaine de caractères contenant des parametre pour une fonction que je dois traiter.
Code :
"fittextflow={verticalalign=center orientate=south} margin=2"
J'aurais besoin de séparer cette chaine aux espaces mais uniquement ceux qui ne sont pas entre des {}.
Je voudrais donc avoir un tableau avec dans la premiere cellule
Code :
"fittextflow={verticalalign=center orientate=south}"
et dans la deuxième J'ai commencer a chercher du côté des regex avec la fonction preg_split mais je n'arrive pas à trouver la bonne regex.
tony8716 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 13h32   #2
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Difficile de faire ca avec un preg_split... il faudrait pouvoir exprimer :
"espace mais qui n'est pas entouré d'accolades".
Ca serait faisable avec des references avant et arriere, mais le probleme c'est que ces references doivent correspondre a une taille FIXE de caracteres... ce qui n'est pas le cas ici.

Je te propose une autre solution, sans preg_split :

Code :
1
2
3
4
5
6
7
8
9
10
<?php
$texte = 'fittextflow={verticalalign=center orientate=south} margin=2 param=3 param2=4 param3={a a a} param4=5';
 
$masque = '#([^=]+)=([^{} ]+|{[^}]+})#U';
preg_match_all($masque, $texte, $result);
 
echo '<pre>';
print_r($result);
echo '</pre>';
?>
$result[0] contient exactement ce que tu souhaite, mais il est possible que $result[1] et $result[2] t'interessent plus ;o)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h17.


 
 
 
 
Partenaires

Hébergement Web