OVH Cloud OVH Cloud

Expression régulière...

22 réponses
Avatar
Cenekemoi
Bonjour,

n'étant pas au top sur les expressions régulières, j'en recherche une
qui me permettrait de vider des parties de texte compris entre deux
mot-clés.

Exemple classique avec les mot-clés '<' et '>' afin de retirer les
balises Html : new RegExp("<[^>]*>", "g");

J'aimerais que les deux caractères < et > ci-dessus soient libres, par
exemple: _DEB_ et _FIN_ mais j'ai du mal à ce que tout fonctionne bien.

Mon essai (en m'inspirant de l'exemple ci-dessus):

<script>
var _H1_ = "_DEB_",_H2_ = "_FIN_";

exp = _H1_ +'link rel="stylesheet" href="../styles/drill_print.css"
type="text/css" media="print"'+ _H2_;
exp+= _H1_ +'style'+ _H2_ +'body,td { font-family: Arial; font-size:
9px;}';
exp+= _H1_ +'/style'+ _H2_;
exp+= _H1_ +'/head'+ _H2_;
exp+= _H1_ +'body onload="onLoad();onLoadTest()"'+ _H2_ +'thierry';
exp+= _H1_ +'/body'+ _H2_;

var reg = new RegExp(_H1_ +"[^"+ _H2_ +"]*"+ _H2_, "g");
alert( exp.replace(reg,"") );
</script>

Résultat:
_DEB_link rel="stylesheet" href="../styles/drill_print.css"
type="text/css" media="print"_FIN_body,td { font-family: Arial;
font-size: 9px;}thierry

C'est lié a priori au caractère "_" dans "drill_print", mais ça ne
m'avance guère.

Des idées ?...

Merci d'avance...

--
Cordialement, Thierry ;-)

10 réponses

1 2 3
Avatar
Olivier Miakinen
(...)
L'option /s (ou PCRE_DOTALL) permet de franchir les sauts de ligne.


Comme je travaille avec des chaînes sans saut de ligne, je comprend que
cela marche sans le "s"


Si jamais tu en avais besoin un jour, il faudrait utiliser l'autre
moyen de spécifier « DOTALL », qui est (si j'ai bien compris car je
n'ai jamais utilisé cette syntaxe) :
"(?s)_DEB_.*?_FIN_"

Ou bien, plus simple (enfin... du moins je suis à peu près sûr que ça
doit marcher) :
"_DEB_(.|n)*?_FIN_"

Et encore plus simple, s'il y a un caractère dont tu sais qu'il
n'appartiendra jamais à tes chaînes, par exemple "§" :
"_DEB_[^§]*?_FIN_"

[...] Comme d'habitude avec toi, les explications sont
limpides et argumentées...du coup, je comprend beaucoup mieux certains
rôles particuliers de RegExp que j'ai eu l'occasion de voir


Merci. Mais si tu as un peu de temps et que tu baragouines suffisamment
l'anglais, je te conseille la lecture de <http://www.pcre.org/pcre.txt>.

Cela dit, tu peux commencer par une doc plus accessible et en français :
<http://fr.php.net/manual/fr/reference.pcre.pattern.syntax.php>
<http://fr.php.net/manual/fr/reference.pcre.pattern.modifiers.php>


Avatar
Olivier Miakinen

pendant que j'y suis, l'expression "<[^>]*>" (pour enlever les balises
html) aurait pu être simplifiée en "<.*?>", n'est-il pas ?


[OUI]

Modulo l'histoire des sauts de ligne, car [^>] accepte tout caractère
sauf le >, mais y compris n.

Avatar
Cenekemoi
Merci. Mais si tu as un peu de temps et que tu baragouines
suffisamment l'anglais, je te conseille la lecture de
<http://www.pcre.org/pcre.txt>.

Cela dit, tu peux commencer par une doc plus accessible et en
français :
<http://fr.php.net/manual/fr/reference.pcre.pattern.syntax.php>
<http://fr.php.net/manual/fr/reference.pcre.pattern.modifiers.php>


Tu l'as dit toi-même, c'est le temps qui manque.
Je pense sincèrement que pour dominer les expressions régulières, il
faut les pratiquer avec des test, des exemples, des retests, etc...
Je le ferais certainement un de ces quatre mais, pour un besoin ponctuel
comme celui que j'ai, le forum m'a paru le plus approprié après quelques
(certainement insuffisantes) recherches via notre pote Google.

--
Cordialement, Thierry ;-)

Avatar
Olivier Miakinen

Tu l'as dit toi-même, c'est le temps qui manque.


Comme toujours. ;-)

Je pense sincèrement que pour dominer les expressions régulières, il
faut les pratiquer avec des test, des exemples, des retests, etc...


Ce n'est pourtant jamais comme ça que j'ai pratiqué, mais je suis
peut-être bien atypique. Je me suis toujours contenté de la doc, et
lorsque j'ai eu besoin d'une expression régulière je ne me rappelle
pas avoir eu besoin de m'y reprendre à deux fois.

Je le ferais certainement un de ces quatre mais, pour un besoin ponctuel
comme celui que j'ai, le forum m'a paru le plus approprié après quelques
(certainement insuffisantes) recherches via notre pote Google.


Oui, bien sûr.

Avatar
ASM
En réponse à Olivier Miakinen qui nous a susurré, en date du : 23/07/07
15:54, le message sibyllin suivant :

Je me suis toujours contenté de la doc, et
lorsque j'ai eu besoin d'une expression régulière je ne me rappelle
pas avoir eu besoin de m'y reprendre à deux fois.


Oui, mais c'est de la triche, car toi *tu* as la fibre ! :-)

--
Stephane Moriaux et son (moins) vieux Mac

Avatar
Cenekemoi
Je le ferais certainement un de ces quatre mais, pour un besoin
ponctuel comme celui que j'ai, le forum m'a paru le plus approprié
après quelques (certainement insuffisantes) recherches via notre
pote Google.


Oui, bien sûr.


Le "bien sûr" est ironique ou non ? J'ai comme un léger doute qui me
taraude...

--
Cordialement, Thierry ;-)


Avatar
Olivier Miakinen

Je le ferais certainement un de ces quatre mais, pour un besoin
ponctuel comme celui que j'ai, le forum m'a paru le plus approprié
après quelques (certainement insuffisantes) recherches via notre
pote Google.


Oui, bien sûr.


Le "bien sûr" est ironique ou non ? J'ai comme un léger doute qui me
taraude...


Ah non, pas du tout, désolé d'avoir pu le laisser croire. Mais en
y réfléchissant, je me rends compte qu'un autre jour j'aurais pu
effectivement faire la *même* réponse à la *même* question avec une
intention tout à fait différente ! (Sauf que j'y aurais ajouté un souriard.)



Avatar
Pierre Goiffon
Cenekemoi wrote:
Tu l'as dit toi-même, c'est le temps qui manque.


:)

Je pense sincèrement que pour dominer les expressions régulières, il
faut les pratiquer avec des test, des exemples, des retests, etc...


C'est exactement ce que je cherchais quand j'ai commencé à utiliser les
regexp de manière industrielle (cad dans mon travail et non plus à la
maison sur 2 petits trucs Js)... A l'époque il n'y avait pas grand chose
sous Windows ! Je me bricolais mes propres outils de test...
Souvenirs... Et puis les moteurs Windows Script étaient assez buggy sur
les regexp, il fallait suivre ça de version en version... dur dur

Bref tout ça pour dire : l'éditeur texte de KDE comporte un éditeur de
regexp, cette petite partie de l'outil a été porté sous Windows... mais
ça semble avoir disparu du Web !
Par contre, trouvé il y a quelques temps un outil absolument fa-bul-leux
!! C'est The Regulator (http://regulator.sourceforge.net). Possibilité
de tester une pattern, de la faire exécuter, sur n'importe quel texte
exemple (même provenant d'un fichier, mm bcp de caractères !), l'éditeur
a de la coloration syntaxique, c'est extrêmement clair, je dirais
presque parfait !

Ha, quand je pense à The Regulator, à la Firefox dev toolbar, à
Firebug... ils en ont de la chance les jeunes qui démarrent dans
l'métier maintenant ! Z'ont pas connu les grandes heures, celles du
Mexicain (tiens, vous avez ressortit le vitriol ?). Mais je m'emporte.

;)

Avatar
Cenekemoi
Par contre, trouvé il y a quelques temps un outil absolument
fa-bul-leux !! C'est The Regulator
(http://regulator.sourceforge.net). Possibilité de tester une
pattern, de la faire exécuter, sur n'importe quel texte exemple (même
provenant d'un fichier, mm bcp de caractères !), l'éditeur a de la
coloration syntaxique, c'est extrêmement clair, je dirais presque
parfait !


Super, je l'essaie tout de suite... :-))

...oh, mince, il faut .Net :-((

C'est pas gentil les faux espoirs ! snif...

--
Cordialement, Thierry ;-)

Avatar
Pierre Goiffon
Cenekemoi wrote:
Par contre, trouvé il y a quelques temps un outil absolument
fa-bul-leux !! C'est The Regulator
(http://regulator.sourceforge.net).


...oh, mince, il faut .Net :-((


Le framework n'est pas énorme, et ça s'installe en quelques clics. Je ne
l'ai sur mes machines que pour The regulator et aucun regrets ! Ca vaut
diablement le coup !


1 2 3