我希望在Sublime Text 2中使用正则表达式进行搜索替换。documentation on this相当贫乏。具体来说,我想对组进行替换,所以比如转换这个文本:
Hello my name is bob
这个搜索词:
找到:my name is (\w)+
替换为:my name used to be $(1)
搜索词工作正常,但我无法找到使用regexp组实际替换的方法。
答案 0 :(得分:534)
对于第一个捕获组(括号中的模式的第一个匹配),反向引用通常为$1
或\1
(反斜杠为1)。所以也许试试:
my name used to be \1
或
my name used to be $1
<强>更新强> 有几个人指出,你的原始捕获模式是不正确的,只会捕获名称的最后一个字母而不是整个名称。您应该使用以下模式来捕获名称的所有字母:
my name is (\w+)
答案 1 :(得分:100)
顺便说一句,在上面的问题中:
有关:
Hello, my name is bob
查找部分:
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”,但它不是您想要替换的分组。
答案 2 :(得分:44)
在搜索字符串中使用()括号
有一点需要强调!您希望在替换字符串中使用的所有<搜索字符串中匹配的细分必须包含在()括号中,否则这些匹配的细分受众群无法使用$ 1,$ 2,...等数据进行访问,也不能使用\ 1,\ 2,..等等。
实施例
我们想要取代&#39; em&#39;与&#39; px&#39;但保留数值:
margin: 10em
margin: 2em
因此我们使用margin: $1px
作为替换字符串。
正确:按$1
括号括起所需的( )
匹配段,如下所示:
查找:margin: ([0-9]*)em
(带括号)
替换为:margin: $1px
结果:
margin: 10px
margin: 2px
错误:以下正则表达式模式将匹配所需的行,但匹配的段在替换字符串中不可用作$1
等变量:
查找:margin: [0-9]*em
(没有括号)
替换为:margin: $1px
结果:( $1
未定义)
margin: px
margin: px
答案 3 :(得分:42)
答案 4 :(得分:20)
请注意,如果您使用9个以上的捕获组,则必须使用语法${10}
。
$10
或\10
或\{10}
将不工作。
答案 5 :(得分:0)
看Sublime Text Unofficial Documentation's article on Search and Replace,看来+(.+)
是您可能想要的捕获组...但是我个人使用了(.*)
,它运作良好。以您所说的方式替换,您可能会喜欢conversation in the forums,特别是this post,它表示只需使用$1
来使用第一个捕获的组。
而且由于图片胜于文字...