Notepad++ 正则表达式替换 - \1 不起作用?
Posted
技术标签:
【中文标题】Notepad++ 正则表达式替换 - \\1 不起作用?【英文标题】:Notepad++ Regex replace - \1 doesn't work?Notepad++ 正则表达式替换 - \1 不起作用? 【发布时间】:2013-11-03 17:22:21 【问题描述】:作为序言,我已经阅读了很多关于此的问题,但我找不到答案(至少在我的挖掘中)。如果我确实错过了,请随时指出!
我知道如何使用正则表达式,事实上我正在寻找我正在搜索的文本。但是,当我尝试按照其他问题建议的"\1MyAppendedTextHere"
进行替换时,它只会删除匹配的模式并添加\1
后面的内容。 (我查找的先前问题指出"\1"
是notepad++ 是如何做到这一点的)。这有改变吗?我做错了吗?
这是它的样子:
find: name[A-Z_0-9]+
replace: \1_SUFFIX
感谢任何帮助!
【问题讨论】:
FWIW,我注意到在 v6.6.8 中,捕获由 $0、$1 等表示。下面的其他 cmets 也提到了 $ 表示法。另一方面,下面提到的反斜杠符号对我不起作用,除了转义输出括号。 【参考方案1】:\1
引用了第一个capturing group 的内容,这意味着您的搜索正则表达式中的第一组括号。您的正则表达式中没有一个,因此 \1
没有可参考的内容。
如果您想引用整个匹配项,请使用\0
,或者在正则表达式的相关部分周围添加括号。
find: name[A-Z_0-9]+
replace: \0_SUFFIX
会将nameABC
更改为nameABC_SUFFIX
。
使用捕获组,您可以执行以下操作
find: name([A-Z_0-9]+)
replace: \1_SUFFIX
这会将nameABC
替换为ABC_SUFFIX
。
【讨论】:
另外,由于Notepad++使用的是PCRE正则表达式引擎,所以要避免使用\1
,习惯$1
(见***.com/q/1068840/2140859)
@psxls:你确定吗? Perl 不是 PCRE(“Perl 兼容的正则表达式”,一个不同的引擎)。
@Tim,感谢您的评论,因为它让我思考,我相信我可能是错的。我知道 PCRE 和 Perl 正则表达式引擎之间的区别,但我天真地假设由于 PCRE 模仿 Perl 的语法和语义,所以同样的警告适用。我检查了PCRE's man page 并没有发现任何关于这个问题的参考,而perlre 的解释给出了两个为什么你应该避免\1
的例子不适用于记事本++ 案例。
另一方面,使用 PCRE states 的 php 首选 $1
形式:替换可能包含 \\n 或(自 PHP 4.0.4 起)$ 形式的引用n, 后一种形式是首选的 on。我想这是有道理的,因为 /e 修饰符可能会导致与 Perl 中相同的问题。
谢谢。我用它来附加前缀。我正在使用 以上是关于Notepad++ 正则表达式替换 - \1 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章