Discussion:
[HS : REGEXP] rechercher d'une expression reguliere
(trop ancien pour répondre)
WebShaker
2010-08-30 22:59:02 UTC
Permalink
Salut

Je cherche l'expression régulière capabale de retrouver une chaine de
caractère de type
n:blablabla
ou bien
n:"blabla blabla"

j'ai bien trouvé les deux expressions qui recherche séparément les chaines

$patternName = '/n\:([^"\s]+)/is';
$patternName = '/n\:"([^"]+)"/is';

Mais je n'arrive pas a les combiner correctement pour n'en faire qu'une
seule !!!
Au mieux j'arrive a ca
$patternName = '/n\:([^"\s]+)|"([^"]+)"/is';

Le probleme c'est que
preg_match($patternName, $string, $matches)

me renvoie le résultat trouvé dans la variable 1 ou 2 du tableau matches
selon qu'il y a une double quote ou pas.

Merci
Etienne
Olivier Miakinen
2010-08-31 07:54:03 UTC
Permalink
[HS REGEXP]
Euh... puisque tu estimes que c'est hors-sujet, pourquoi ne pas écrire
directement dans fr.comp.lang.regexp ? ;-)
Je cherche l'expression régulière capable de retrouver une chaine de
caractère de type
n:blablabla
ou bien
n:"blabla blabla"
j'ai bien trouvé les deux expressions qui recherchent séparément les chaines
$patternName = '/n\:([^"\s]+)/is';
$patternName = '/n\:"([^"]+)"/is';
Mais je n'arrive pas a les combiner correctement pour n'en faire qu'une
seule !!!
Au mieux j'arrive a ca
$patternName = '/n\:([^"\s]+)|"([^"]+)"/is';
Le probleme c'est que
preg_match($patternName, $string, $matches)
me renvoie le résultat trouvé dans la variable 1 ou 2 du tableau matches
selon qu'il y a une double quote ou pas.
Une solution possible doit se trouver ici :
<http://fr.php.net/manual/fr/regexp.reference.conditional.php>

Ça devrait donc ressembler à ça (non testé) :
$patternName = /n:(")?(?(1)[^"]+|[^"\s]+)\1/is

Ou bien à ça (pas mieux) :
$patternName = /n:(")?(?(1)[^"]+|[^"\s]+)(?(1)")/is

Le résultat sera alors toujours dans la variable 2 du tableau matches.

Cordialement,
--
Olivier Miakinen
Etienne
2010-08-31 11:01:06 UTC
Permalink
Post by Olivier Miakinen
Euh... puisque tu estimes que c'est hors-sujet, pourquoi ne pas écrire
directement dans fr.comp.lang.regexp ? ;-)
Ben parce que je connais pas :) mais maintenant je ferai ça !
Post by Olivier Miakinen
$patternName = /n:(")?(?(1)[^"]+|[^"\s]+)\1/is
Houla...
bon ben je vais tester et surtout essayer de comprendre.
Merci :)

Etienne
Olivier Miakinen
2010-09-01 08:00:47 UTC
Permalink
Post by Etienne
Post by Olivier Miakinen
Euh... puisque tu estimes que c'est hors-sujet, pourquoi ne pas écrire
directement dans fr.comp.lang.regexp ? ;-)
Ben parce que je connais pas :) mais maintenant je ferai ça !
Mauvaise mémoire, changer de mémoire ©. Si tu es bien WebShaker,
mi-février dernier j'ai déjà fait suivre là bas une de tes questions
de regexp, et tu m'y as même répondu.
Post by Etienne
Post by Olivier Miakinen
$patternName = /n:(")?(?(1)[^"]+|[^"\s]+)\1/is
C'était tellement non testé que j'ai oublié les quotes et le
point-virgule. Mais l'intention y était... ;-)
Post by Etienne
bon ben je vais tester et surtout essayer de comprendre.
Je tu suggère de commencer par lire l'exemple donné sur la page
<http://fr.php.net/manual/fr/regexp.reference.conditional.php>, et
essayer de comprendre celui-ci : je m'en suis très fortement inspiré
et il me semble relativement bien expliqué.

Cordialement,
--
Olivier Miakinen
Continuer la lecture sur narkive:
Loading...