expression régulière matchant les sauts de ligne

Le
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 .*([.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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Luc.Habert.00__arjf
Le #21786301
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 ».
Ph. Ivaldi
Le #21786291
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/
fabien.chene
Le #21786281
(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
fabien.chene
Le #21786271
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\)*).?;\)



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
fabien.chene
Le #21786261
(Fabien Chêne) writes:

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\)*).?;\)



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
fabien.chene
Le #21786251
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.



Merci pour l'explication !

--
Fab
Luc.Habert.00__arjf
Le #21786241
Fabien Chêne :

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



Paskeu...
Matthieu Moy
Le #21786231
(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
Publicité
Poster une réponse
Anonyme