在Sublime Text 2中replace正则expression式

我期待在Sublime Text 2中使用正则expression式进行searchreplace。 关于此的文档相当贫乏。 具体来说,我想在组上进行replace,所以像转换这个文本:

Hello my name is bob

而这个search词:

find: my name is (\w)+

replace为: my name used to be $(1)

search条款工作得很好,但我不能找出一种方法来实际做一个replace使用正则expression式组。

对于第一个捕获组(通常括号中的第一个匹配),反向引用是$1\1 (反斜杠之一)。 所以也许尝试:

 my name used to be \1 

要么

 my name used to be $1 

更新:正如几个人指出的,你的原始捕获模式是不正确的,只会捕获名称的最后一个字母,而不是整个名称。 您应该使用以下模式来捕获名称的所有字母:

 my name is (\w+) 

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

对于:

 Hello, my name is bob 

查找零件:

 my name is (\w)+ 

带replace部分:

 my name used to be \1 

会返回:

 Hello, my name used to be b 

将查找部分更改为:

 my name is (\w+) 

replace将是你所期望的:

 Hello, my name used to be bob 

虽然(\ w)+会匹配“bob”,但这不是您想要replace的分组。

在searchstring中使用()括号

有一件重要的事要强调! searchstring中所有要在replacestring中使用的匹配段都必须被括号括起来 ,否则这些匹配段将无法与variables(如$ 1,$ 2,…或\ 1,\ 2,..等

例:

我们想用'px'replace'em',但保留数字值:

 margin: 10em margin: 2em 

所以我们使用margin: $1px作为replacestring。


正确:通过( )圆括号包含所需的$1匹配段,如下所示:

FIND: margin: ([0-9]*)em (带圆括号)

更换为: margin: $1px

结果:

 margin: 10px margin: 2px 

错误:以下正则expression式模式将匹配所需的行,但匹配的段将不能在replace的string中使用,如$1这样的variables:

FIND: margin: [0-9]*em (不带圆括号)

更换为: margin: $1px

结果:( $1是未定义的)

 margin: px margin: px 

这是一个核准答案的视觉介绍。

在这里输入图像说明

请注意,如果您使用多于9个捕获组,则必须使用语法${10}

$10\10\{10}将不起作用。