Besoin d'aide sur une expression régulière

Le
nic_o_mat
Rebonjour
Puisque j'ai mis les doigts dans l'Elisp je me suis fait happer
J'écris une fonction qui remplace des expressions régulières dans mon
code VHDL mais ne doit pas toucher aux commentaires.
Par exemple, je ne veux qu'une instruction par ligne. Je recherche
donc tout ; (qui marque la fin d'une instruction) qui soit suivi par
un caractère alphabétique w. Le problème c'est que ça ne fait pas =
la
distinction entre le code et les commentaires. Il faut donc que
j'ajoute dans l'expression que le ; ne doit pas être précédé
(n'importe où dans la ligne) par -- (c'est ainsi qu'on désigne les
commentaires en VHDL)
Comment fait-on pour écrire "not --".*; ?

Merci d'avance
Nicolas
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Matthieu Moy
Le #21788101
writes:

Comment fait-on pour écrire "not --".*; ?



D'abord, fait M-x re-builder RET (et émerveilles-toi ;-) ).

Ensuite, "not --".*, c'est une suite de caractères pour laquelle
chaque "-" est suivi immédiatement d'autre chose qu'un "-" (i.e.
[^-]), avec éventuellement (i.e. ?) un dernier tiret final.

Je ramasse les copies dans 10 minutes ;-).

--
Matthieu
nic_o_mat
Le #21788091
On 21 mar, 16:29, Matthieu Moy wrote:
writes:
> Comment fait-on pour écrire "not --".*; ?

D'abord, fait M-x re-builder RET (et émerveilles-toi ;-) ).



Oooooooooooooooooooooh :o)


Ensuite, "not --".*, c'est une suite de caractères pour laquelle
chaque "-" est suivi immédiatement d'autre chose qu'un "-" (i.e.
[^-]), avec éventuellement (i.e. ?) un dernier tiret final.

Je ramasse les copies dans 10 minutes ;-).



Bon bah copie blanche, alors ...
J'ai bêtement essayé (-[^-])? mais ça ne marche pas, ça "matche"
avec le dernier -
(-[^-])* ne marche pas mieux
Je vais continuer à essayer et réfléchir ... (décidément, 10mn c' est
pas assez vu mon niveau ;o)

Merci
Nicolas
Matthieu Moy
Le #21788081
writes:

On 21 mar, 16:29, Matthieu Moy
Ensuite, "not --".*, c'est une suite de caractères pour laquelle
chaque "-" est suivi immédiatement d'autre chose qu'un "-" (i.e.
[^-]), avec éventuellement (i.e. ?) un dernier tiret final.

Je ramasse les copies dans 10 minutes ;-).



Bon bah copie blanche, alors ...
J'ai bêtement essayé (-[^-])? mais ça ne marche pas, ça "matche"
avec le dernier -
(-[^-])* ne marche pas mieux



C'est pas loin. Mais tu peux aussi avoir un caractère autre que -.

Une solution est loin derrière ma signature, mais cherches encore un
peu avant de scroller ;-).

--
Matthieu




















































































"^\(-[^-]\|[^-]\)*-?;"
nic_o_mat
Le #21787991
On 21 mar, 17:46, Matthieu Moy wrote:
writes:
> On 21 mar, 16:29, Matthieu Moy
>> Ensuite, "not --".*, c'est une suite de caractères pour laquelle
>> chaque "-" est suivi immédiatement d'autre chose qu'un "-" (i.e.
>> [^-]), avec éventuellement (i.e. ?) un dernier tiret final.

>> Je ramasse les copies dans 10 minutes ;-).

> Bon bah copie blanche, alors ...
> J'ai bêtement essayé (-[^-])? mais ça ne marche pas, ça "matc he"
> avec le dernier -
> (-[^-])* ne marche pas mieux

C'est pas loin. Mais tu peux aussi avoir un caractère autre que -.

Une solution est loin derrière ma signature, mais cherches encore un
peu avant de scroller ;-).



J'étais arrivé à ça avant de partir hier soir
^[^-$]*(-[^-$]*)?;
(à la réflexion ultérieure, je crois que les $ sont inutiles)
Je me suis donc permis de scroller immédiatement

"^\(-[^-]\|[^-]\)*-?;"



Ah oui, c'est plus élégant. J'étais sur la bonne piste. Merci beaucoup
(en passant, il n'y aura certainement pas de dernier - solitaire avant
le ; parceque c'est syntaxiquement incorrect en VHDL mais dans
l'absolu, tu as raison de prévoir le cas)

Tout ça pour remettre de l'ordre dans du code écrit par un collègue
qui a un style que je trouve détestable ...

Encore merci
Nicolas
Jacques L'helgoualc'h
Le #21787981
Bonjour,

Le 21-03-2007, Matthieu Moy a écrit :
[...]
"^\(-[^-]\|[^-]\)*-?;"



On peut aussi l'écrire en mettant en facteur la partie commune

"^\(-?[^-]\)*-?;"

ou encore en avalant les non-tirets par paquets

"^\(-?[^-]+\)*-?;"

Par ailleurs, « C-u C-s regexp » permet de tester en direct-laïve dans
Emacs, à condition de ne pas oublier de dédoubler les contre-obliques
par la suite...

Pour le problème posé, je ne suis pas sûr que ça suffise --- que se
passe-t-il en cas de commentaires emboîtés ? Peut-on mettre des
point-virgules dans les commentaires ?
--
Jacques L'helgoualc'h
Matthieu Moy
Le #21787971
Jacques L'helgoualc'h
Bonjour,

Le 21-03-2007, Matthieu Moy a écrit :
[...]
"^\(-[^-]\|[^-]\)*-?;"



On peut aussi l'écrire en mettant en facteur la partie commune

"^\(-?[^-]\)*-?;"

ou encore en avalant les non-tirets par paquets

"^\(-?[^-]+\)*-?;"



Bien vu.

Par ailleurs, « C-u C-s regexp » permet de tester en direct-laïve dans
Emacs,



Mais ça n'est rien par rapport à re-builder AMHA.

Pour le problème posé, je ne suis pas sûr que ça suffise --- que se
passe-t-il en cas de commentaires emboîtés ?



Je ne vois pas bien ce que tu veux dire : un commentaire, c'est
--.*n, ça ne peut par être emboité ...

Peut-on mettre des point-virgules dans les commentaires ?



Oui, mais est-ce que ça change quelque chose ?

--
Matthieu
Jacques L'helgoualc'h
Le #21787931
Le 22-03-2007, Matthieu Moy a écrit :
Jacques L'helgoualc'h
[...]
Par ailleurs, « C-u C-s regexp » permet de tester en direct-laïve dans
Emacs,



Mais ça n'est rien par rapport à re-builder AMHA.



Oui, mais c'est commode pour tester dans un buffer exemple.

Pour le problème posé, je ne suis pas sûr que ça suffise --- que se
passe-t-il en cas de commentaires emboîtés ?



Je ne vois pas bien ce que tu veux dire : un commentaire, c'est
--.*n, ça ne peut par être emboité ...



Mea culpa, j'ai mélangé avec --.*;

Peut-on mettre des point-virgules dans les commentaires ?



Oui, mais est-ce que ça change quelque chose ?



Non... Mais peut-on trouver des "--" hors commentaire ?
--
Jacques L'helgoualc'h
nic_o_mat
Le #21787921
On 22 mar, 10:42, Jacques L'helgoualc'h
Non... Mais peut-on trouver des "--" hors commentaire ?



En principe non puisque "--" est l'indicateur de commentaire. Ceci dit
si on a une chaîne de caractères (entre ""), elle doit pouvoir
contenir des --, des ; et n'importe quoi d'autre et là ça commence à
être la merde... (mais c'est assez rare, des chaînes de caractères
dans du VHDL synthétisable)

J'ai quand même un souci, c'est que [^-] inclut les sauts de ligne
(mais à la réflexion, je ne sais pas si c'est gênant pour ce que je
veux faire)

Nicolas
Matthieu Moy
Le #21787911
Jacques L'helgoualc'h
Le 22-03-2007, Matthieu Moy a écrit :
Jacques L'helgoualc'h
[...]
Par ailleurs, « C-u C-s regexp » permet de tester en direct-laïve dans
Emacs,



Mais ça n'est rien par rapport à re-builder AMHA.



Oui, mais c'est commode pour tester dans un buffer exemple.



Justement, re-builder t'ouvre un petit buffer, et te donne la
coloration des blocs reconnus dans le buffer (avec des couleurs
différentes pour les parenthèses de groupement, ...).

Essayes avec ceci

"^\(-?[^-n]\)*-?;"

(effectivement, c'était [^-n] pour interdire les sauts de ligne)

Dans ton buffer *Article*[1] contenant ceci:

code; -- commentaire.
code; -- commentaire;
x + 3 - y;
toto-;
titi-; -- xyz
ligne
coupée;

--
Matthieu

[1] comment, ne me dis pas que tu n'utilises pas Gnus ?!?
Jacques L'helgoualc'h
Le #21787901
Le 22-03-2007, Matthieu Moy a écrit :
Jacques L'helgoualc'h > [C-u C-s]
Justement, re-builder t'ouvre un petit buffer, et te donne la
coloration des blocs reconnus dans le buffer (avec des couleurs
différentes pour les parenthèses de groupement, ...).

Essayes avec ceci

"^\(-?[^-n]\)*-?;"



Oui, c'est bien --- sauf mes couleurs, texte blanc sur fond cyan clair
ce n'est pas très lisible... ça faisait longtemps que je n'avais plus
touché à ma palette.

C-u C-s est un peu plus verbeux pendant la frappe, ça peut être utile
pour le débutant (et je ne connaissais pas re-builder (merci)).

[1] comment, ne me dis pas que tu n'utilises pas Gnus ?!?



Ben non, s/pas/plus/, même pas honte : sur un PII-266/96Mo, c'était
devenu un peu trop lourd. J'utilise Mutt/slrn pour lire le courrier/
les niouzes --- mais l'éditeur est bien sûr un gnuclient.
--
Jacques L'helgoualc'h
Publicité
Poster une réponse
Anonyme