2012-11-02 2 views

Répondre

11

Vous essayez de parse XML with regular expressions.

Cependant, ce que vous faites mal de toute façon est d'utiliser une répétition gourmande. Cela ira tout le chemin de la première <name> à la toute dernière </name> (même si elles ne sont pas ensemble), parce que le .* va essayer de consommer autant que possible tout en remplissant toujours la condition de match .. Utilisez ceci à la place:

Search: (<name>).*?(</name>) 
Replace: \1xyz\2 

Ou, pour être sur le côté sûr, vous pouvez également échapper à la < et >, car ils sont des méta-caractères dans certains cas spécifiques (pas dans celui-ci cependant):

Search: (\<name\>).*?(\</name\>) 
Replace: \1xyz\2 

dans les deux cas, cela rend le .* ungreedy, c.-à-d. consommer le moins possible.

Et assurez-vous de mettre à niveau vers Notepad ++ 6, car auparavant, il y avait quelques problèmes avec le moteur regex de Notepad ++.

Enfin, comme hoombar souligné dans un commentaire . correspond par défaut tous les caractères sauf caractères de saut de ligne. Dans Notepadd ++, vous pouvez modifier ce comportement en cochant la case . matches newline.

+3

vous pouvez également vouloir cocher la case ". Correspond à la nouvelle ligne" –

+0

bon point. J'ajouterai qu'à la réponse –

+0

j'échappe généralement au '<>' pour éviter un comportement inattendu '\ <\>' – Ariaan

Questions connexes