搜索/替换中的Notepad ++ Regex Backreference语法 - \1或$ 1

ami*_*elz 35 regex backreference replace escaping notepad++

我试图使用Notepad ++ Search/Replace with Regular Expression将特定单词替换为这些单词的较短版本.


我使用以下正则表达式来匹配每个以er(但不是er一个单词)结尾的单词 - 并r使用反向引用将相匹配的单词替换为相同的单词减去结尾:

Find what: ([a-zA-z]+e)r

Replace with: $1

但它不会取代匹配的单词,即使它找到了它们.

但是,如果我将反向引用语法更改为:

Replace with: \1

一切正常.


为什么$1反向引用不起作用?

两种形式的后退有什么区别 - \1$1

ami*_*elz 36

Notepad ++的早期版本(v5.9.8和之前版本)仅支持标准POSIX正则表达式.但是,在6.0版中添加了完整的PCRE(Perl兼容正则表达式)搜索/替换支持:

Notepad ++ 6.0中的新功能和增强功能:

  • 支持PCRE(Perl兼容正则表达式).

这意味着如果您使用的是Notepad ++ v6.0或任何较新的版本(例如v6.1.5),则可以使用PCRE语法,而$1不是\1用于反向引用,但它与早期版本的Notepad ++不兼容(版本6.0之前).除此之外,他们是相似的.

有关反向引用语法与新语法支持背后原因之间差异的更多信息,请参阅替换字符串中的反向引用语法(为什么是美元符号?).

可以在此处找到有关如何在Notepad ++中使用正则表达式的有用教程.

  • @amiregelz我多年来一直在使用(和爱好)Notepad ++,但我对它的最大挫折之一就是它对Regex的支持很差.我无法相信,我对这两年的改进一直不知所措.标准的反向引用,零宽度断言 - 它很漂亮!谢谢你睁开眼睛! (5认同)