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

expression régulière matchant les sauts de ligne

8 réponses
Avatar
fabien.chene
Bonjour,

je ne parviens pas à construire avec Emacs, une expression régulière
qui « matcherait » plusieurs lignes.

Par exemple :

int f( double a,
double b,
double c );

je voudrais matcher la déclaration de cette fonction.
J'essaye .*([.\n\t ]*).*; et des variantes de ce genre, mais sans
parvenir au résultat :-/
Auriez vous une idée sur la façon de faire cela ?

Merci.

--
Fab

8 réponses

Avatar
Luc.Habert.00__arjf
Fabien Chêne :


je ne parviens pas à construire avec Emacs, une expression régulière
qui « matcherait » plusieurs lignes.

Par exemple :

int f( double a,
double b,
double c );

je voudrais matcher la déclaration de cette fonction.
J'essaye .*([.nt ]*).*;



(.|
)

pour « un caractère ou un retour à la ligne ». Tu entres le retour à la
ligne avec « C-q C-j ».
Avatar
Ph. Ivaldi
Le 04 mai 2007, (Luc Habert)écrivit :

je voudrais matcher la déclaration de cette fonction.
J'essaye .*([.nt ]*).*;



(.|
)

pour « un caractère ou un retour à la ligne ». Tu entres le retour à
la ligne avec « C-q C-j ».



On peut aussi utiliser quelque chose comme ça:
(int f((.|n)*).?;)
Tester avec M-x re-builder <RET>
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/
Avatar
fabien.chene
(Luc Habert) writes:

Fabien Chêne :


je ne parviens pas à construire avec Emacs, une expression régulière
qui « matcherait » plusieurs lignes.

Par exemple :

int f( double a,
double b,
double c );

je voudrais matcher la déclaration de cette fonction.
J'essaye .*([.nt ]*).*;



(.|
)

pour « un caractère ou un retour à la ligne ». Tu entres le retour à la
ligne avec « C-q C-j ».



Aaah merci !

Par curiosité, pourquoi n n'est il pas utilisable ici ?

(.|n)

--
Fab
Avatar
fabien.chene
Ph. Ivaldi writes:

Le 04 mai 2007, (Luc Habert)écrivit :

je voudrais matcher la déclaration de cette fonction.
J'essaye .*([.nt ]*).*;



(.|
)

pour « un caractère ou un retour à la ligne ». Tu entres le retour à
la ligne avec « C-q C-j ».



On peut aussi utiliser quelque chose comme ça:
(int f((.|n)*).?;)



Cela fonctionne-t'il pour vous avec n ? Bizarre, cela n'a pas l'air
de fonctionner pour moi.
Dans le manual d'E-Lisp, il est fait référence à n pour désigner un
retour à la ligne, mais ça ne marche pas pour moi (?)

Tester avec M-x re-builder <RET>



Excellent mode pour tester les expressions régulières. Merci de
l'avoir indiqué !


--
Fab
Avatar
fabien.chene
(Fabien Chêne) writes:

Ph. Ivaldi writes:

Le 04 mai 2007, (Luc Habert)écrivit :

je voudrais matcher la déclaration de cette fonction.
J'essaye .*([.nt ]*).*;



(.|
)

pour « un caractère ou un retour à la ligne ». Tu entres le retour à
la ligne avec « C-q C-j ».



On peut aussi utiliser quelque chose comme ça:
(int f((.|n)*).?;)



Cela fonctionne-t'il pour vous avec n ? Bizarre, cela n'a pas l'air
de fonctionner pour moi.



Bon, j'avais du commettre une faute de frappe, cela fonctionne
parfaitement, merci.


--
Fab
Avatar
fabien.chene
Matthieu Moy writes:

(Fabien Chêne) writes:

Par curiosité, pourquoi n n'est il pas utilisable ici ?



Ça dépends du contexte.

n est spécial pour les chaines de caractères Emacs, mais je crois pas
pour les expressions régulières. Donc, dans de l'Emacs-lisp, tu
pourras écrire

"(.|n)"

qu'Emacs verra, après avoir parsé la chaine, comme

(.|
)

Mais si c'est dans une commande interactive où on te demande
directement le contenu de la chaine, et pas le littéral chaine avec
les « " » autour, tu n'as plus droit aux séquences d'échappement des
chaines elisp.



Merci pour l'explication !

--
Fab
Avatar
Luc.Habert.00__arjf
Fabien Chêne :

Par curiosité, pourquoi n n'est il pas utilisable ici ?



Paskeu...
Avatar
Matthieu Moy
(Fabien Chêne) writes:

Par curiosité, pourquoi n n'est il pas utilisable ici ?



Ça dépends du contexte.

n est spécial pour les chaines de caractères Emacs, mais je crois pas
pour les expressions régulières. Donc, dans de l'Emacs-lisp, tu
pourras écrire

"(.|n)"

qu'Emacs verra, après avoir parsé la chaine, comme

(.|
)

Mais si c'est dans une commande interactive où on te demande
directement le contenu de la chaine, et pas le littéral chaine avec
les « " » autour, tu n'as plus droit aux séquences d'échappement des
chaines elisp.

--
Matthieu