Aide sur la fonction replace-match

Le
Nicolas Matringe
Bonjour

Si je comprends dans le principe ce que fait la fonction replace-
match, j'ai un peu de mal comprendre exactement comment elle
considre les sous-expressions.

J'essaie de simplifier une fonction afin d'viter de lui faire
parcourir un trop grand nombre de fois tout mon fichier (13 fois
actuellement, je voudrais rduire un peu).
Un certain nombre de ces boucles recherchent une expression rgulire
afin de la remplacer, et je m'interroge sur la possibilit de
rechercher plusieurs expressions spares par | et de ne remplacer
que celle qui a t trouve.
Exemple :
(while (re-search-forward "(<expression 1>)|(<expression 2>)" nil
t)
(replace-match "<remplacement1>" nil nil 1)
(replace-match "<remplacement2>" nil nil 2))

Est-ce que a marche (remplacement de l'expression n par le
remplacement n, ou est-ce que 1 indique la premire sous-expression
de l'expression qui a t trouve ? Et est-ce que le replace-match qui
fait rfrence l'expression qui n'a pas t trouve est corre=
ctement
ignor ?

Merci d'avance
Nicolas
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Matthieu Moy
Le #21787771
"Nicolas Matringe"
(while (re-search-forward "(<expression 1>)|(<expression 2>)" nil
t)



Il faut doubler tes .

(replace-match "<remplacement1>" nil nil 1)
(replace-match "<remplacement2>" nil nil 2))



1 et 2, pas 1 et 2, et en 5ème position. Les N sont à utiliser dans
<remplacementN>.

Lire et relire C-h f replace-match.

Sinon, le mieux pour savoir si ça marche, c'est encore d'essayer ;-).

--
Matthieu
Nicolas Matringe
Le #21787051
On 26 mar, 10:05, Matthieu Moy wrote:
"Nicolas Matringe" > (while (re-search-forward "(<expression 1>)|(<expression 2>)" nil
> t)

Il faut doubler tes .



Ah oui, c'est vrai. J'ai tapé ça vite fait chez google (bah oui, je
peux pas poster dans les news. Et puis j'utilise pas emacs pour le
mail ou les news :o)


> (replace-match "<remplacement1>" nil nil 1)
> (replace-match "<remplacement2>" nil nil 2))

1 et 2, pas 1 et 2, et en 5ème position. Les N sont à utiliser dans
<remplacementN>.



La doc était pas très claire. Il faut donc 3 "nil"


Lire et relire C-h f replace-match.



J'arrête pas depuis ce matin mais ça suffit pas. Ou alors j'ai pas
encore atteint le nombre de cafés suffisant.
(en fait je lisais ça, qui est légèrement différent
http://www.gnu.org/software/emacs/elisp-manual/html_mono/elisp.html#Match-D ata
)

Sinon, le mieux pour savoir si ça marche, c'est encore d'essayer ;-).



C'est ce que je vais faire aussi.

Nicolas
Nicolas Matringe
Le #21787041
On 26 mar, 10:19, "Nicolas Matringe"
On 26 mar, 10:05, Matthieu Moy
> Sinon, le mieux pour savoir si ça marche, c'est encore d'essayer ;-).
C'est ce que je vais faire aussi.



Bon, ça marche pas.
Quelqu'un connait une fonction qui permet d'identifier la sous-
expression qui a été trouvée ?

Nicolas
Nicolas Matringe
Le #21787031
On 26 mar, 12:23, "Nicolas Matringe"
On 26 mar, 10:19, "Nicolas Matringe"
> On 26 mar, 10:05, Matthieu Moy > > Sinon, le mieux pour savoir si ça marche, c'est encore d'essayer ;- ).
> C'est ce que je vais faire aussi.

Bon, ça marche pas.
Quelqu'un connait une fonction qui permet d'identifier la sous-
expression qui a été trouvée ?



Je cherche et je trouve :o)

(while (re-search-forward "\(\(<sous-exp1>\)\(<sous-exp2>)\)
|\(\(<sous-exp3>\)\(sous-exp4\)\)" nil t)
(if (match-string 1)
(replace-match "\2n\3")
(replace-match "\5n\6"))
(beginning-of-line))

Nicolas
Publicité
Poster une réponse
Anonyme