Notepad++ 正则表达式中的反向引用语法在搜索/替换中 - \1 或 $1

43

我曾尝试使用Notepad++的搜索/替换功能和正则表达式来将特定单词替换为这些单词的缩写。


我使用了以下正则表达式,匹配以er结尾的每个单词(但不包括单独的er),并使用反向引用将匹配的单词替换为相同的单词去掉末尾的r

查找内容: ([a-zA-z]+e)r

替换为: $1

但它没有替换匹配的单词,尽管它可以找到它们。

然而,如果我将反向引用语法更改为以下形式:

替换为: \1

一切都正常工作。


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

\1$1这两种反向引用形式之间有什么区别?

1个回答

44
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++中如何使用正则表达式的有用教程可以在这里找到。

6
@amiregelz 我已经使用(并且喜欢)Notepad++很多年了,但其中最大的挫折之一就是它对正则表达式的支持很差。我不敢相信我在这些增强功能上已经被蒙在鼓里两年了。标准反向引用、零宽度断言——真是太棒了!谢谢你让我开了眼界! - Brian Lacy
是的,正在做一些类似搜索以相同单词开头的连续行等操作。太棒了;-) (searchtext)[^\n]*\n\1 - JGFMK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接