正则表达式 - 正则表达式搜索替换Sublime Text 2

我希望在Sublime Text 2中使用正则表达式进行搜索替换。关于此的文档相当贫乏。 具体来说,我想对组进行替换,所以像转换这个文本:

my name used to be $(1)

这个搜索词:

找到答案:my name used to be $(1)

替换为:my name used to be $(1)

搜索词工作正常,但我无法找到一种方法来实际使用regexp组进行替换。

hackerhasid asked 2019-01-06T22:47:29Z
5个解决方案
512 votes

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

my name used to be \1

要么

my name used to be $1

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

my name is (\w+)
Bobulous answered 2019-01-06T22:47:45Z
94 votes

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

对于:

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”,但它不是您想要替换的分组。

CrnaStena answered 2019-01-06T22:48:51Z
40 votes

在搜索字符串中使用()括号

有一点需要强调! 您要在替换字符串中使用的搜索字符串中的所有匹配段必须被()括号包含,否则这些匹配的段将无法通过变量(如$ 1,$ 2,...或\ 1,\)来访问 2,..等

例:

我们想用'px'替换'em'但保留数值:

margin: 10em
margin: 2em

所以我们使用$1作为替换字符串。


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

发现:$1(带括号)

替代:$1

结果:

margin: 10px
margin: 2px

错误:以下正则表达式模式将匹配所需的行,但匹配的段在替换的字符串中将不可用作变量,如$1

发现:$1(没有括号)

替代:$1

结果:($1未定义)

margin: px
margin: px
Hrvoje Golcic answered 2019-01-06T22:50:24Z
36 votes

以下是已批准答案的直观演示。

enter image description here

zeeawan answered 2019-01-06T22:50:46Z
19 votes

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

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

Andreas Haferburg answered 2019-01-06T22:51:15Z
translate from https://stackoverflow.com:/questions/11819886/regular-expression-search-replace-in-sublime-text-2