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

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

15 réponses
Avatar
nic_o_mat
Rebonjour
Puisque j'ai mis les doigts dans l'Elisp je me suis fait happer ...
J'=E9cris une fonction qui remplace des expressions r=E9guli=E8res 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=E8re alphab=E9tique \w. Le probl=E8me c'est que =E7a 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 =EAtre pr=E9c=E9d=E9
(n'importe o=F9 dans la ligne) par -- (c'est ainsi qu'on d=E9signe les
commentaires en VHDL)
Comment fait-on pour =E9crire "not --".*; ?

Merci d'avance
Nicolas

10 réponses

1 2
Avatar
Matthieu Moy
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
Avatar
nic_o_mat
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
Avatar
Matthieu Moy
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




















































































"^(-[^-]|[^-])*-?;"
Avatar
nic_o_mat
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
Avatar
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

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

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
Avatar
Matthieu Moy
Jacques L'helgoualc'h <lhh+ writes:

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
Avatar
Jacques L'helgoualc'h
Le 22-03-2007, Matthieu Moy a écrit :
Jacques L'helgoualc'h <lhh+ writes:
[...]
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
Avatar
nic_o_mat
On 22 mar, 10:42, Jacques L'helgoualc'h <lhh+ wrote:
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
Avatar
Matthieu Moy
Jacques L'helgoualc'h <lhh+ writes:

Le 22-03-2007, Matthieu Moy a écrit :
Jacques L'helgoualc'h <lhh+ writes:
[...]
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 ?!?
Avatar
Jacques L'helgoualc'h
Le 22-03-2007, Matthieu Moy a écrit :
Jacques L'helgoualc'h <lhh+ writes:
> [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
1 2