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
considère 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 réduire un peu).
Un certain nombre de ces boucles recherchent une expression régulière
afin de la remplacer, et je m'interroge sur la possibilité de
rechercher plusieurs expressions séparées par | et de ne remplacer
que celle qui a été trouvée.
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 première sous-expression
de l'expression qui a été trouvée ? Et est-ce que le replace-match qui
fait référence à l'expression qui n'a pas été trouvée est corre=
ctement
ignoré ?

Merci d'avance
Nicolas
Questions / Réponses high-tech
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
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