【问题标题】:Sublime Text 2 regex matching with >9 back-referencesSublime Text 2 正则表达式匹配 >9 个反向引用
【发布时间】:2013-10-04 06:07:59
【问题描述】:

我正在尝试在一个字符串中捕获多个组并使用正则表达式重新排序它们。但是,一旦我达到 9 个以上的反向引用,它们就不会像我预期的那样替换。

例如: 这是一个人为的例子,但它应该说明正在发生的事情。

输入字符串:abcdefghij 查找内容:^(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)$ 替换为:\10 预期输出:j 实际输出:a0

我也试过了:

替换为:10 美元

不是\10$10 插入第十个分组括号的内容,而是将第一个分组括号的内容插入“0”。

更新:

在较新版本的 Sublime Text 中使用 $10 确实有效,但最好使用如下所述的 ${10} 语法。

【问题讨论】:

    标签: regex sublimetext2


    【解决方案1】:

    用途:

    ${10}
    

    我刚试过,对我有用。

    我也尝试过使用 find:

    ^(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)$
    

    替换为:$10

    它奏效了。但是,我使用的是 v2.0.2 build 2221。与\10 相同,不起作用,但可以按照您在问题中描述的那样工作。

    值得注意的是,许多正则表达式引擎替换正在从 \# 格式转换为 $# 格式,所以这也许就是为什么 $# 对我来说即使没有大括号也能更好地工作。

    虽然现在,如果您想替换为第 10 个捕获后跟一个数字(例如 $100),引擎将查找第 100 个捕获组,并且对于您的示例,将替换为任何内容。

    【讨论】:

    • 使用“\{10}”产生“{10}”,而不是预期的“j”。但是 ${10} 起作用了。谢谢!
    • @karlwilbur 对,这就是为什么我没有在我的回答中使用\{10} :)
    • @karlwilbur 另外,您使用反引号 (`) 来表示预格式化的代码 :)
    • 我相信示例字符串 (.)(.) ... 的技术名称是“Rack”。
    • @happyD 有任何来源/参考吗?
    【解决方案2】:

    你需要在周围放大括号

    ${10}
    

    养成这个习惯!

    当你真的想在$1 后面加上一个数字0 时,它会变得更加有用。那么你可能需要${1}0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多