简体   繁体   中英

Replace using RegEx in notepad++

I would like to replace all names in an XML file tagged by with let's say xyz. In other words, replace everything (including whitespace) between the tags. What am I doing wrong?

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

You are trying to parse XML with regular expressions .

However, what you are doing wrong anyway is using a greedy repetition. This will go all the way from the first <name> to the very last </name> (even if they do not belong together), because the .* will try to consume as much as possible while still fulfilling the match condition.. Use this instead:

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

Or to be on the safe side you can also escape the < and > , since they are meta-characters in some specific cases (not in this one though):

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

In both cases, this makes the .* ungreedy, ie it will consume as little as possible.

And make sure you upgrade to Notepad++ 6, because before that there were a few issues with Notepad++'s regex engine.

Lastly, as hoombar pointed out in a comment . by default matches every character except line break characters. In Notepadd++ you can change this behavior by ticking the . matches newline . matches newline checkbox.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM