user15964
user15964

Reputation: 2639

why with look behind regex, the replacement is not working well in Notepad++?

In Notepad++, for example if the search regex is

(?<latex>\$[^\$]*\$)(?=[\x{4e00}-\x{9fa5}])

and the replace is

~\g{latex}~

then the replacement is working properly.

But if the search regex contains look behind expression like

(?<=[\x{4e00}-\x{9fa5}])(?<latex>\$[^\$]*\$)(?=[\x{4e00}-\x{9fa5}])

then replace

~\g{latex}~

doesn't work in Notepad++, why???

Upvotes: 1

Views: 204

Answers (1)

Jerry
Jerry

Reputation: 71538

Actually, I found out that your named backreference is the actual problem. As per the documentation, you need to use the syntax $+{name} for a named capture reference in the replace. So that one should work:

(?<=[\x{4e00}-\x{9fa5}])(?<latex>\$[^\$]*\$)(?=[\x{4e00}-\x{9fa5}])

And replace with:

~$+{latex}~

So the first regex you had should not be working properly, but replacing with literal ~g<latex>~. Even so, I can't really be sure here since I'm using an older version of N++ and the docs could be out of date.

Though I think that the simplest would be that you don't use the capture group. The below should work fine:

(?<=[\x{4e00}-\x{9fa5}])\$[^$]*\$(?=[\x{4e00}-\x{9fa5}])

And replace with ~$0~.

Upvotes: 1

Related Questions