【问题标题】:How do I use more than nine backreferences in Notepad++ regexp?如何在 Notepad++ 正则表达式中使用超过九个反向引用?
【发布时间】:2016-06-30 20:16:24
【问题描述】:

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

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

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

那么我无法成功使用超过 9 个反向引用进行替换,因为 \10 会产生第一个捕获组的内容加上文字“0”。

我尝试使用$10,但结果相同。

【问题讨论】:

  • 使用大括号:${10}

标签: regex notepad++ backreference capturing-group


【解决方案1】:

您可以为此使用花括号:

${10}

作为参考,Notepad++ 使用boost::regex,您可以在此处找到它的替换模式文档:Boost-Extended Format String Syntax。这种替换模式允许在替换模式中使用更复杂的表达式(如条件和常见的 Perl 占位符)。

【讨论】:

  • 这是否意味着我可以将它用于 javascript regexp?
  • @Rahul:不,JS“理解”$10(它在消除反向引用 ID 方面相当聪明)。
  • @Rahul JavaScript 有自己的正则表达式规范,但是在 JS 中你可以简单地使用回调函数进行替换,所以问题不存在。
  • 感谢您提供额外的文档!
【解决方案2】:

只需使用花括号:

${10}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多