Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HS : REGEXP] rechercher d'une expression reguliere

3 réponses
Avatar
WebShaker
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

3 réponses

Avatar
Olivier Miakinen
Le 31/08/2010 00:59, WebShaker a écrit :
[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
Avatar
Etienne
Le 31/08/2010 09:54, Olivier Miakinen a écrit :
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 !

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



Houla...
bon ben je vais tester et surtout essayer de comprendre.
Merci :)

Etienne
Avatar
Olivier Miakinen
Le 31/08/2010 13:01, Etienne a écrit :

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.

Ça devrait donc ressembler à ça (non testé) :
$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... ;-)

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