在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}
将不起作用。