Bonjour,

un probleme avec une regex, j'ai dans une variable j :
j = '%%abc%% puis %%def%%';

j'ai besoin d'une regex qui puisse isoler %%abc%% et %%def%%

merci
Merci de m'avoir repondu si vite, c'est un bon départ, mais le probleme est que je peut avoir n'importe quel charactere entre %%ABC%% et %%DEF%% des chiffres des characteres speciaux... un peut de tous quoi.
Struan a écrit :
Merci de m'avoir repondu si vite, c'est un bon départ, mais le probleme est que je peut avoir n'importe quel charactere entre %%ABC%% et %%DEF%% des chiffres des characteres speciaux... un peut de tous quoi.

Ben ça n'empêche pas, il me semble.
Sinon, si le schéma est régulier (par exemple avec toujours 3 lettres en minuscules ou en majucules), il doit y avoir moyen de faire plus spécifique comme chaîne à identifier. Un truc du genre :
%%[A-Za-z]{3}%%

À vérifier mais il me semble que c'est ça.
QuentinC a écrit :
Sinon, au pire :
%%.*?%%

Certes, mais vraiment au pire. On prend toujours des risques avec des schémas aussi génériques, qui peuvent correspondre à des chaînes que l'on ne voulait pas isoler.
C'est bien pour ça que c'est vraiment au pire. Mais comme il n'a pas trop l'air de savoir ce qui pourrait y avoir entre les %...
Bonjour, et désoler du temp de réponse,

a écrit :
%%.*?%%

Cela ne me convient pas car, la chaine recuperer est "%%abc%% puis %%def%%" or ce que je veux c'est "%%abc%%" et ensuite "%%def%%" (j'espere reussire a me faire comprendre).

a écrit :
%%[A-Za-z]%%

Ca, c'est pas mal, mais, si je remplace la chaine "%%abc%% puis %%def%%" par "%%abc%% puis %%éàc%%" je ne recupere pas la deuxieme partie. ce qu'il me faut c'est reussir a recuperer toute chaine se trouvant entre %%.

Merci pour toute votre aide.
Struan a écrit :
%%[A-Za-z]%%

Ca, c'est pas mal, mais, si je remplace la chaine "%%abc%% puis %%def%%" par "%%abc%% puis %%éàc%%" je ne recupere pas la deuxieme partie. ce qu'il me faut c'est reussir a recuperer toute chaine se trouvant entre %%.

Toute chaîne commencée par "%%" et terminée per "%%" :
%%.*%%            (zéro ou plusieurs caractères entre les %%)
%%.+%%            (un ou plusieurs caractères entre les %%)

Dans tous les cas, dès que le deuxième "%%" est rencontré, cela clôt la chaîne récupérée. Donc non, ça ne peut pas récupérer la chaîne "%%abc%% puis %%def%%", uniquement "%%abc%%" d'une part, et "%%def%%" d'autre part.
Bah avec un preg_replace, ça marche direct pour toute la chaine :

$str = preg_replace('#%%([\w\s]+)%%#', '<span style="color: green">%%</span><span style="color: red">\\1</span><span style="color:green">%%</span>', $str);


(les spans, c'est pour voir un peu le rendu).

\w = mots (majuscule ou minuscule, accentué ou pas) (= [a-zA-Z ET LA LISTE DES LETTRES ACCENTUEES])
\d = chiffres ( = [0-9])
\s = espaces (tabulation, espace, saut de ligne, ... (\t, \n, , ...)

Testé sur la chaine :
a écrit :

$str = 'bla bla bla %%aSééée02dsSdc%% bla bla %%def%% blie blye %ddlsf%% lbal %%';


Résultat :
a écrit :

bla bla bla %%aSééée02dsSdc%% bla bla %%def%% blie blye %ddlsf%% lbal %%

Modifié par Olivier (25 Jul 2006 - 03:16)
Donc, pour répondre totalement à la question.

Avec :

preg_match_all('#%%([\w\s\d]+)%%#', $str, $res);


Où $str est ta chaîne à traiter, tu récupéreras dans le tableau $res les chaînes qui vont bien.

Tu auras d'une part '%%abc%%' et '%%def%%' et d'autre part 'abc' et 'def' (parcequ'on a mis une parenthèse au motif [\w\s\d]+ pour l'isoler dans une variable).
(Donc, tu récupères juste '%%abc%%' et '%%def%%' si tu enlèves les parenthèses bien sûr, mais tout dépend ce que tu veux récupérer exactement).

A toi de gerer ça comme tu veux ensuite Smiley smile
Modifié par Olivier (25 Jul 2006 - 03:25)