J'ai ecrit un bout de code pour tester, un truc tout bete,=20
3 textbox, 1 pour mon text, 1 pour l'expression, une pour=20
mon r=E9sultat. Je cherche =E0 extraire un morceau de mon text.
voici le texte :
begin
bla
bla
bla
end
begin
bli
bli
bli
bli
end
je cherche =E0 r=E9cup=E9rer ce qu'il y a entre les begins et=20
les ends (begin et end compris).
mon expression : (^begin$*.?^end$) ou (^begin$.*?^end$)
comme option je mets multiligne, mais apparemment rien n'y=20
fait le caract=E8re de d=E9but de ligne et celui de fin de=20
ligne ne sont pas interpret=E9s. J'ai donc test=E9 les options=20
seules et les combinaisons d'options, mais rien n'y fait.
J'ai trouv=E9 ici des "testeurs de regex" (regex-coach, the=20
regulator, expresso). J'ai essay=E9 avec et le r=E9sultat=20
change suivant l'outil !!!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Patrick Philippot
Cirfain wrote:
je cherche à récupérer ce qu'il y a entre les begins et les ends (begin et end compris).
Bonjour,
begin(.|n)*?end
? pour la correspondance la plus courte possible.
Notez que cette approche est toutefois ambigüe car un "end" entre le begin et le end peut être légitimement présent (sous-chaîne d'une des chaînes de la séquence bla bla bla:
begin my girl friend <<< end
Dans ce cas, il ne va pas être facile d'exclure le "end" de "friend".
Les expressions régulières ont leurs limites et ne peuvent pas remplacer un bon parsing. Je ne sais pas ce que vous cherchez exactement à parser mais ce mécanisme ne conviendra pas à un source Pascal ou Delphi ou à un source .RC par exemple.
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
Cirfain wrote:
je cherche à récupérer ce qu'il y a entre les begins et
les ends (begin et end compris).
Bonjour,
begin(.|n)*?end
? pour la correspondance la plus courte possible.
Notez que cette approche est toutefois ambigüe car un "end" entre le
begin et le end peut être légitimement présent (sous-chaîne d'une des
chaînes de la séquence bla bla bla:
begin
my
girl
friend <<<
end
Dans ce cas, il ne va pas être facile d'exclure le "end" de "friend".
Les expressions régulières ont leurs limites et ne peuvent pas remplacer
un bon parsing. Je ne sais pas ce que vous cherchez exactement à parser
mais ce mécanisme ne conviendra pas à un source Pascal ou Delphi ou à un
source .RC par exemple.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
je cherche à récupérer ce qu'il y a entre les begins et les ends (begin et end compris).
Bonjour,
begin(.|n)*?end
? pour la correspondance la plus courte possible.
Notez que cette approche est toutefois ambigüe car un "end" entre le begin et le end peut être légitimement présent (sous-chaîne d'une des chaînes de la séquence bla bla bla:
begin my girl friend <<< end
Dans ce cas, il ne va pas être facile d'exclure le "end" de "friend".
Les expressions régulières ont leurs limites et ne peuvent pas remplacer un bon parsing. Je ne sais pas ce que vous cherchez exactement à parser mais ce mécanisme ne conviendra pas à un source Pascal ou Delphi ou à un source .RC par exemple.
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
Ambassadeur Kosh
une Regex est moins "puissante" qu'un LALR. maintenant, les regex ont toujours "tendance" à proposer l'expression la plus longue possible. alors à part exclure end de l'interieur de la zone, je ne vois pas trop... et si les niveaux de parantheses se multiplient, n'y songez meme pas.
une Regex est moins "puissante" qu'un LALR.
maintenant, les regex ont toujours "tendance" à proposer l'expression la
plus longue possible.
alors à part exclure end de l'interieur de la zone, je ne vois pas trop...
et si les niveaux de parantheses se multiplient, n'y songez meme pas.
une Regex est moins "puissante" qu'un LALR. maintenant, les regex ont toujours "tendance" à proposer l'expression la plus longue possible. alors à part exclure end de l'interieur de la zone, je ne vois pas trop... et si les niveaux de parantheses se multiplient, n'y songez meme pas.
C'est pour cela que j'avais besoin de ^ (debut de ligne) et du $ (fin de ligne), mais visiblement ça ne marche pas...
Tant pis, je vais utiliser la bonne vielle méthode de la lecture ligne à ligne du "begin" jusqu'au "end".
Ca marche déjà ça, mais j'étais persuadé que les regex pouvais améliorer la rapidité.
Merci pour vos réponses.
A++
-----Message d'origine----- Cirfain wrote:
je cherche à récupérer ce qu'il y a entre les begins et les ends (begin et end compris).
Bonjour,
begin(.|n)*?end
? pour la correspondance la plus courte possible.
Notez que cette approche est toutefois ambigüe car
un "end" entre le
begin et le end peut être légitimement présent (sous-
chaîne d'une des
chaînes de la séquence bla bla bla:
begin my girl friend <<< end
Dans ce cas, il ne va pas être facile d'exclure le "end"
de "friend".
Les expressions régulières ont leurs limites et ne
peuvent pas remplacer
un bon parsing. Je ne sais pas ce que vous cherchez
exactement à parser
mais ce mécanisme ne conviendra pas à un source Pascal ou
Delphi ou à un
source .RC par exemple.
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
.
C'est pour cela que j'avais besoin de ^ (debut de ligne)
et du $ (fin de ligne), mais visiblement ça ne marche
pas...
Tant pis, je vais utiliser la bonne vielle méthode de la
lecture ligne à ligne du "begin" jusqu'au "end".
Ca marche déjà ça, mais j'étais persuadé que les regex
pouvais améliorer la rapidité.
Merci pour vos réponses.
A++
-----Message d'origine-----
Cirfain wrote:
je cherche à récupérer ce qu'il y a entre les begins et
les ends (begin et end compris).
Bonjour,
begin(.|n)*?end
? pour la correspondance la plus courte possible.
Notez que cette approche est toutefois ambigüe car
un "end" entre le
begin et le end peut être légitimement présent (sous-
chaîne d'une des
chaînes de la séquence bla bla bla:
begin
my
girl
friend <<<
end
Dans ce cas, il ne va pas être facile d'exclure le "end"
de "friend".
Les expressions régulières ont leurs limites et ne
peuvent pas remplacer
un bon parsing. Je ne sais pas ce que vous cherchez
exactement à parser
mais ce mécanisme ne conviendra pas à un source Pascal ou
Delphi ou à un
source .RC par exemple.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
C'est pour cela que j'avais besoin de ^ (debut de ligne) et du $ (fin de ligne), mais visiblement ça ne marche pas...
Tant pis, je vais utiliser la bonne vielle méthode de la lecture ligne à ligne du "begin" jusqu'au "end".
Ca marche déjà ça, mais j'étais persuadé que les regex pouvais améliorer la rapidité.
Merci pour vos réponses.
A++
-----Message d'origine----- Cirfain wrote:
je cherche à récupérer ce qu'il y a entre les begins et les ends (begin et end compris).
Bonjour,
begin(.|n)*?end
? pour la correspondance la plus courte possible.
Notez que cette approche est toutefois ambigüe car
un "end" entre le
begin et le end peut être légitimement présent (sous-
chaîne d'une des
chaînes de la séquence bla bla bla:
begin my girl friend <<< end
Dans ce cas, il ne va pas être facile d'exclure le "end"
de "friend".
Les expressions régulières ont leurs limites et ne
peuvent pas remplacer
un bon parsing. Je ne sais pas ce que vous cherchez
exactement à parser
mais ce mécanisme ne conviendra pas à un source Pascal ou
Delphi ou à un
source .RC par exemple.
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
.
julien
Cirfain wrote:
Bonjour,
Les Regex me posent un problème en multiligne.
J'ai ecrit un bout de code pour tester, un truc tout bete, 3 textbox, 1 pour mon text, 1 pour l'expression, une pour mon résultat. Je cherche à extraire un morceau de mon text.
voici le texte : begin bla bla bla end begin bli bli bli bli end
je cherche à récupérer ce qu'il y a entre les begins et les ends (begin et end compris).
mon expression : (^begin$*.?^end$) ou (^begin$.*?^end$) comme option je mets multiligne, mais apparemment rien n'y fait le caractère de début de ligne et celui de fin de ligne ne sont pas interpretés. J'ai donc testé les options seules et les combinaisons d'options, mais rien n'y fait.
Bonjour
Je pense que ^correspond au début du "flow": dans le cas du multiligne, il y a un seul ^ et un seul $. Ligne par ligne, il y a un ^ et un $ poar ligne.
(n|^)beginn.*nend(n|$) est un début. Mais il va falloir l'améliorer, car dans votre exemple, ca va prendre tout le texte entre le premier begin et le dernier end.
Julien
Cirfain wrote:
Bonjour,
Les Regex me posent un problème en multiligne.
J'ai ecrit un bout de code pour tester, un truc tout bete,
3 textbox, 1 pour mon text, 1 pour l'expression, une pour
mon résultat. Je cherche à extraire un morceau de mon text.
voici le texte :
begin
bla
bla
bla
end
begin
bli
bli
bli
bli
end
je cherche à récupérer ce qu'il y a entre les begins et
les ends (begin et end compris).
mon expression : (^begin$*.?^end$) ou (^begin$.*?^end$)
comme option je mets multiligne, mais apparemment rien n'y
fait le caractère de début de ligne et celui de fin de
ligne ne sont pas interpretés. J'ai donc testé les options
seules et les combinaisons d'options, mais rien n'y fait.
Bonjour
Je pense que ^correspond au début du "flow": dans le cas du multiligne,
il y a un seul ^ et un seul $. Ligne par ligne, il y a un ^ et un $ poar
ligne.
(n|^)beginn.*nend(n|$) est un début. Mais il va falloir l'améliorer,
car dans votre exemple, ca va prendre tout le texte entre le premier
begin et le dernier end.
J'ai ecrit un bout de code pour tester, un truc tout bete, 3 textbox, 1 pour mon text, 1 pour l'expression, une pour mon résultat. Je cherche à extraire un morceau de mon text.
voici le texte : begin bla bla bla end begin bli bli bli bli end
je cherche à récupérer ce qu'il y a entre les begins et les ends (begin et end compris).
mon expression : (^begin$*.?^end$) ou (^begin$.*?^end$) comme option je mets multiligne, mais apparemment rien n'y fait le caractère de début de ligne et celui de fin de ligne ne sont pas interpretés. J'ai donc testé les options seules et les combinaisons d'options, mais rien n'y fait.
Bonjour
Je pense que ^correspond au début du "flow": dans le cas du multiligne, il y a un seul ^ et un seul $. Ligne par ligne, il y a un ^ et un $ poar ligne.
(n|^)beginn.*nend(n|$) est un début. Mais il va falloir l'améliorer, car dans votre exemple, ca va prendre tout le texte entre le premier begin et le dernier end.
Julien
Cirfain
Pile poil ce qu'il me fallait ! Il suffit de rajouter un ? derriere le *. pour avoir le contenu par groupe.
Merci
-----Message d'origine----- Cirfain wrote:
Bonjour,
Les Regex me posent un problème en multiligne.
J'ai ecrit un bout de code pour tester, un truc tout
bete,
3 textbox, 1 pour mon text, 1 pour l'expression, une
pour
mon résultat. Je cherche à extraire un morceau de mon
text.
voici le texte : begin bla bla bla end begin bli bli bli bli end
je cherche à récupérer ce qu'il y a entre les begins et les ends (begin et end compris).
mon expression : (^begin$*.?^end$) ou (^begin$.*?^end$) comme option je mets multiligne, mais apparemment rien
n'y
fait le caractère de début de ligne et celui de fin de ligne ne sont pas interpretés. J'ai donc testé les
options
seules et les combinaisons d'options, mais rien n'y
fait.
Bonjour
Je pense que ^correspond au début du "flow": dans le cas
du multiligne,
il y a un seul ^ et un seul $. Ligne par ligne, il y a un
^ et un $ poar
ligne.
(n|^)beginn.*nend(n|$) est un début. Mais il va
falloir l'améliorer,
car dans votre exemple, ca va prendre tout le texte entre
le premier
begin et le dernier end.
Julien .
Pile poil ce qu'il me fallait !
Il suffit de rajouter un ? derriere le *. pour avoir le
contenu par groupe.
Merci
-----Message d'origine-----
Cirfain wrote:
Bonjour,
Les Regex me posent un problème en multiligne.
J'ai ecrit un bout de code pour tester, un truc tout
bete,
3 textbox, 1 pour mon text, 1 pour l'expression, une
pour
mon résultat. Je cherche à extraire un morceau de mon
text.
voici le texte :
begin
bla
bla
bla
end
begin
bli
bli
bli
bli
end
je cherche à récupérer ce qu'il y a entre les begins et
les ends (begin et end compris).
mon expression : (^begin$*.?^end$) ou (^begin$.*?^end$)
comme option je mets multiligne, mais apparemment rien
n'y
fait le caractère de début de ligne et celui de fin de
ligne ne sont pas interpretés. J'ai donc testé les
options
seules et les combinaisons d'options, mais rien n'y
fait.
Bonjour
Je pense que ^correspond au début du "flow": dans le cas
du multiligne,
il y a un seul ^ et un seul $. Ligne par ligne, il y a un
^ et un $ poar
ligne.
(n|^)beginn.*nend(n|$) est un début. Mais il va
falloir l'améliorer,
car dans votre exemple, ca va prendre tout le texte entre
Pile poil ce qu'il me fallait ! Il suffit de rajouter un ? derriere le *. pour avoir le contenu par groupe.
Merci
-----Message d'origine----- Cirfain wrote:
Bonjour,
Les Regex me posent un problème en multiligne.
J'ai ecrit un bout de code pour tester, un truc tout
bete,
3 textbox, 1 pour mon text, 1 pour l'expression, une
pour
mon résultat. Je cherche à extraire un morceau de mon
text.
voici le texte : begin bla bla bla end begin bli bli bli bli end
je cherche à récupérer ce qu'il y a entre les begins et les ends (begin et end compris).
mon expression : (^begin$*.?^end$) ou (^begin$.*?^end$) comme option je mets multiligne, mais apparemment rien
n'y
fait le caractère de début de ligne et celui de fin de ligne ne sont pas interpretés. J'ai donc testé les
options
seules et les combinaisons d'options, mais rien n'y
fait.
Bonjour
Je pense que ^correspond au début du "flow": dans le cas
du multiligne,
il y a un seul ^ et un seul $. Ligne par ligne, il y a un
^ et un $ poar
ligne.
(n|^)beginn.*nend(n|$) est un début. Mais il va
falloir l'améliorer,
car dans votre exemple, ca va prendre tout le texte entre
le premier
begin et le dernier end.
Julien .
Cirfain
Après qq recherches, je me suis rendu compte qu'une petite chose empechait que tout fonctionne correctement : le "r" et oui quand on l'enleve, et bien tout va bien...
Voila
-----Message d'origine----- Bonjour,
Les Regex me posent un problème en multiligne.
J'ai ecrit un bout de code pour tester, un truc tout
bete,
3 textbox, 1 pour mon text, 1 pour l'expression, une pour mon résultat. Je cherche à extraire un morceau de mon
text.
voici le texte : begin bla bla bla end begin bli bli bli bli end
je cherche à récupérer ce qu'il y a entre les begins et les ends (begin et end compris).
mon expression : (^begin$*.?^end$) ou (^begin$.*?^end$) comme option je mets multiligne, mais apparemment rien
n'y
fait le caractère de début de ligne et celui de fin de ligne ne sont pas interpretés. J'ai donc testé les
options
seules et les combinaisons d'options, mais rien n'y fait.
J'ai trouvé ici des "testeurs de regex" (regex-coach, the regulator, expresso). J'ai essayé avec et le résultat change suivant l'outil !!!
Je n'y comprends plus rien...
Merci pour votre aide. Cirfain .
Après qq recherches, je me suis rendu compte qu'une petite
chose empechait que tout fonctionne correctement : le "r"
et oui quand on l'enleve, et bien tout va bien...
Voila
-----Message d'origine-----
Bonjour,
Les Regex me posent un problème en multiligne.
J'ai ecrit un bout de code pour tester, un truc tout
bete,
3 textbox, 1 pour mon text, 1 pour l'expression, une pour
mon résultat. Je cherche à extraire un morceau de mon
text.
voici le texte :
begin
bla
bla
bla
end
begin
bli
bli
bli
bli
end
je cherche à récupérer ce qu'il y a entre les begins et
les ends (begin et end compris).
mon expression : (^begin$*.?^end$) ou (^begin$.*?^end$)
comme option je mets multiligne, mais apparemment rien
n'y
fait le caractère de début de ligne et celui de fin de
ligne ne sont pas interpretés. J'ai donc testé les
options
seules et les combinaisons d'options, mais rien n'y fait.
J'ai trouvé ici des "testeurs de regex" (regex-coach, the
regulator, expresso). J'ai essayé avec et le résultat
change suivant l'outil !!!
Après qq recherches, je me suis rendu compte qu'une petite chose empechait que tout fonctionne correctement : le "r" et oui quand on l'enleve, et bien tout va bien...
Voila
-----Message d'origine----- Bonjour,
Les Regex me posent un problème en multiligne.
J'ai ecrit un bout de code pour tester, un truc tout
bete,
3 textbox, 1 pour mon text, 1 pour l'expression, une pour mon résultat. Je cherche à extraire un morceau de mon
text.
voici le texte : begin bla bla bla end begin bli bli bli bli end
je cherche à récupérer ce qu'il y a entre les begins et les ends (begin et end compris).
mon expression : (^begin$*.?^end$) ou (^begin$.*?^end$) comme option je mets multiligne, mais apparemment rien
n'y
fait le caractère de début de ligne et celui de fin de ligne ne sont pas interpretés. J'ai donc testé les
options
seules et les combinaisons d'options, mais rien n'y fait.
J'ai trouvé ici des "testeurs de regex" (regex-coach, the regulator, expresso). J'ai essayé avec et le résultat change suivant l'outil !!!
Je n'y comprends plus rien...
Merci pour votre aide. Cirfain .
Zazar
Bonjour,
C'est pour cela que j'avais besoin de ^ (debut de ligne) et du $ (fin de ligne), mais visiblement ça ne marche pas...
Par défaut, ^ et $ signifient respectivement début et fin de la chaîne d'entrée, si vous voulez modifier leurs comportements pour qu'ils signifient debut et fin de ligne, il faut utiliser l'option RegexOptions.Multiline.
-- Zazar
Bonjour,
C'est pour cela que j'avais besoin de ^ (debut de ligne)
et du $ (fin de ligne), mais visiblement ça ne marche
pas...
Par défaut, ^ et $ signifient respectivement début et fin de la chaîne
d'entrée, si vous voulez modifier leurs comportements pour qu'ils signifient
debut et fin de ligne, il faut utiliser l'option RegexOptions.Multiline.
C'est pour cela que j'avais besoin de ^ (debut de ligne) et du $ (fin de ligne), mais visiblement ça ne marche pas...
Par défaut, ^ et $ signifient respectivement début et fin de la chaîne d'entrée, si vous voulez modifier leurs comportements pour qu'ils signifient debut et fin de ligne, il faut utiliser l'option RegexOptions.Multiline.
-- Zazar
Zazar
> Pile poil ce qu'il me fallait ! Il suffit de rajouter un ? derriere le *. pour avoir le contenu par groupe.
Il y a encore un autre problème avec cette regex, c'est qu'elle ne valide pas un groupe vide : begin end
Si vous voulez réglez ce problème, il faut passer par l'utilisation de ^ et $.
-- Zazar
> Pile poil ce qu'il me fallait !
Il suffit de rajouter un ? derriere le *. pour avoir le
contenu par groupe.
Il y a encore un autre problème avec cette regex, c'est qu'elle ne valide
pas un groupe vide :
begin
end
Si vous voulez réglez ce problème, il faut passer par l'utilisation de ^ et
$.