Regex 升华文本2中的正则表达式搜索替换

Regex 升华文本2中的正则表达式搜索替换,regex,replace,sublimetext2,Regex,Replace,Sublimetext2,我想在Sublime Text 2中用正则表达式替换搜索。这是相当贫血。具体来说,我想对组进行替换,例如转换此文本: 你好,我叫鲍勃 而这个搜索词: 查找内容:我的名字是(\w)+ 替换为:我的名字以前是$(1) 搜索词工作得很好,但我无法找到使用regexp组实际执行替换的方法。对于第一个捕获组(括号中模式的第一个匹配项),back引用通常是$1或\1(反斜杠1)),而且Sublime确实支持这两种语法。因此,请尝试: my name used to be \1 或 还要注意,您的原始捕获模

我想在Sublime Text 2中用正则表达式替换搜索。这是相当贫血。具体来说,我想对组进行替换,例如转换此文本:

你好,我叫鲍勃

而这个搜索词:

查找内容:
我的名字是(\w)+

替换为:
我的名字以前是$(1)


搜索词工作得很好,但我无法找到使用regexp组实际执行替换的方法。

对于第一个捕获组(括号中模式的第一个匹配项),back引用通常是
$1
\1
(反斜杠1)),而且Sublime确实支持这两种语法。因此,请尝试:

my name used to be \1

还要注意,您的原始捕获模式:

my name is (\w)+
不正确,将只捕获名称的最后一个字母,而不是整个名称。您应该使用以下模式捕获名称的所有字母:

my name is (\w+)

顺便说一下,在上面的问题中:

用于:

查找部分:

my name is (\w)+
更换零件:

my name used to be \1
将返回:

Hello, my name used to be b
将“查找零件”更改为:

my name is (\w+)
替换将是您所期望的:

Hello, my name used to be bob
虽然(\w)+将匹配“bob”,但它不是您要替换的分组

重要提示:在搜索字符串中使用
()
括号

虽然前面的答案是正确的,但有一件重要的事情需要强调!搜索字符串中要在替换字符串中使用的所有匹配段必须用括号括起来,否则这些匹配段将无法被定义的变量访问,例如
$1
$2
\1
\2

例如,我们希望将“em”替换为“px”,但保留数字值:

margin:10em;/*预期:利润率:10px*/
保证金:2em;/*预期:利润率:2倍*/
  • 替换字符串:
    边距:$1px
    边距:\1px
  • 搜索字符串(正确):
    边距:([0-9]*)em
    //带括号
  • 搜索字符串(不正确):
    margin:[0-9]*em

正确的大小写示例:使用
边距:([0-9]*)em
搜索字符串(带括号)。用
()
括号将所需的匹配段(例如
$1
\1
)括起来,如下所示:

  • 查找:
    margin:([0-9]*)em
    (带括号)
  • 替换为:
    margin:$1px
    margin:\1px
  • 结果:
margin:10px;
保证金:2倍;

不正确的案例示例:使用
边距:[0-9]*em
搜索字符串(不带括号)。以下正则表达式模式将匹配所需的行,但匹配的段在替换字符串中不能作为变量使用,例如
$1
\1

  • 查找:
    边距:[0-9]*em
    (不带括号)
  • 替换为:
    margin:$1px
    margin:\1px
  • 结果:
margin:px;/*`$1`未定义*/
保证金:px;/*`$1`未定义*/

请注意,如果使用9个以上的捕获组,则必须使用语法
${10}


$10
\10
\{10}
无效。

以下是已批准答案的视觉演示

看,它看起来像是您可能想要的捕获组。。。但我个人使用了
(.*)
,效果很好。要按照您所说的方式进行替换,您可能会喜欢这样,特别是使用
$1
来使用第一个捕获的组

既然图片比文字好…

之前:

之后:

否,$0不用作正则表达式中的后向引用(因为
\0
等于空字符,
\0ddd
用作具有代码点ddd的字符的转义符)。然而,
$0
似乎确实在Sublime 2中用作“退出标记”,根据(尽管我很难找到足够的示例来准确说明退出标记在Sublime 2中是如何使用的)。退出标记
$0
在Sublime文本2/3中用于将光标放在从片段扩展的退出位置上$0仍然适用于在升华文本2中反向引用整个表达式2
$0
是整个正则表达式匹配项
$1
是第一个捕获组。
$0
在Sublime 3中为我工作,以获得完整的匹配表达式。我在整个ReGEX中有一个捕获组,中间有一个嵌套的捕获组,并且<代码> $1 引用内部捕获组,这是奇怪的,因为我认为捕获组是通过打开圆括号来排序的。希望这对别人有帮助!谢谢你,这个答案确实指出了一个解决我问题的有趣事实。谢谢你指出。使用(),我可以在Sublime 3中用\1替换。因为$,[,(,和)是特殊字符,所以您应该用反斜杠转义每个特殊字符。谢谢!这对我替换并在捕获的组末尾添加一个数字很有帮助,例如,要将
1
附加到第二个捕获组,您需要使用大括号,如
${2}1
;$21表示不存在的第21个捕获组。
my name is (\w+)
Hello, my name used to be bob