如何在 Notepad++ 正则表达式中使用超过九个反向引用?

问题描述 投票:0回答:3

如果我在Notepad++中使用长正则表达式,即:

^([^ ]+) ([^ ]+) ([^ ]+) (\[.*?\]) (".*?") (".*?") (".*?") (".*?") (\d+) (\d+) (\d+)$

(这是为了将 Apache 日志行从空格分隔变为制表符分隔)

然后我无法成功使用超过九个反向引用进行替换,因为

\10
产生第一个捕获组的内容加上文字“0”。

我尝试使用

$10
,但这给出了相同的结果。

regex notepad++ backreference capturing-group
3个回答
11
投票

您可以为此使用花括号:

${10}

作为参考,Notepad++ 使用

boost::regex
,您可以在此处找到其替换模式文档:Boost-扩展格式字符串语法。这种替换模式允许在替换模式中使用更复杂的表达式(例如条件和常见的 Perl 占位符)。


2
投票

只需使用花括号:

${10}

这将确保引用第 10 个捕获组,而不是后跟零的第 1 个组。


0
投票

在 2024 年(也许更早),高阶反向引用的

${10}
语法不再有效

我们在搜索对话框的状态栏中收到此错误消息:

查找:无效的正则表达式

但是,根据搜索| Notepad++ 使用手册搜索 | Notepad++ 用户手册,第 捕获组和反向引用,存在以下选项:

\ℕ
\gℕ
\g{ℕ}
\g<ℕ>
\g'ℕ'
\kℕ
\k{ℕ}
\k<ℕ>
\k'ℕ'

这里的

有点误导,因为它是数字或标识符的占位符。多位数字必须用
<>
{}
''
引用。名称必须始终加引号。所有需要引用的内容都必须以
g
k
为前缀。

因此像 1234567890xx0987654321

abcdefghijkkjihgfedcba
这样的 22 个字符的
回文
可以通过以下所有模式进行匹配:

^(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)\g{11}\g<10>\9\8\7\6\5\4\3\2\1$
^(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)\k{11}\k<10>\9\8\7\6\5\4\3\2\1$
^(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)\k<11>\k<10>\9\8\7\6\5\4\3\2\1$
^(\w)(\w)(\w)(\w)(\w)(\w)(\w)(?<Y>\w)(\w)(\w)(?<namex>\w)\k{namex}\k<10>\9\k<Y>\7\6\5\4\3\2\1$
© www.soinside.com 2019 - 2024. All rights reserved.