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

hac*_*sid 422 regex replace sublimetext2

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

Hello my name is bob

这个搜索词:

找什么: my name is (\w)+

用...来代替: my name used to be $(1)

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

Bob*_*ous 559

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

my name used to be \1
Run Code Online (Sandbox Code Playgroud)

要么

my name used to be $1
Run Code Online (Sandbox Code Playgroud)

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

my name is (\w)+
Run Code Online (Sandbox Code Playgroud)

  • 除了,它不是'$ 0`? (15认同)
  • 不,$ 0不用作正则表达式中的反向引用(因为`\ 0`等于空字符,'\ 0ddd`用作代码点ddd的字符的转义).但是,根据[本页],"$ 0"似乎确实在Sublime2中用作"退出标记"(https://sublime-text-unofficial-documentation.readthedocs.org/en/latest/reference/snippets.html ?highlight = $ 0)(虽然我找不到足够的例子来确定如何在Sublime2中使用退出标记). (11认同)
  • 在Sublime Text 2/3中使用退出标记"$ 0"将光标放在片段扩展的退出处.[更多关于片段](https://sublime-text-unofficial-documentation.readthedocs.org/en/latest/reference/snippets.html?highlight=snippets). (3认同)
  • $ 0仍然可以在Sublime Text 2中反向引用整个表达式 (2认同)
  • $ 0是整个正则表达式匹配项;$ 1是第一个捕获组。 (2认同)

Crn*_*ena 103

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

对于:

Hello, my name is bob
Run Code Online (Sandbox Code Playgroud)

找到部分:

my name is (\w)+
Run Code Online (Sandbox Code Playgroud)

有替换部分:

my name used to be \1
Run Code Online (Sandbox Code Playgroud)

会回来:

Hello, my name used to be b
Run Code Online (Sandbox Code Playgroud)

将查找部分更改为:

my name is (\w+)
Run Code Online (Sandbox Code Playgroud)

替换将是您所期望的:

Hello, my name used to be bob
Run Code Online (Sandbox Code Playgroud)

虽然(\ w)+将匹配"bob",但它不是您想要替换的分组.


Hrv*_*cic 47

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

有一点需要强调!所有的搜索字符串匹配的段要在您的使用替换字符串必须由()括号拥抱,否则,这些匹配的段将是不可到达与变量,如$ 1,$ 2,...,也不\ 1\2,..等

例:

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

margin: 10em
margin: 2em
Run Code Online (Sandbox Code Playgroud)

所以我们使用margin: $1px替换字符串.


正确:$1( )括号括起所需的匹配段如下:

发现:( margin: ([0-9]*)em带括号)

替换为: margin: $1px

结果:

margin: 10px
margin: 2px
Run Code Online (Sandbox Code Playgroud)

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

发现:( margin: [0-9]*em没有括号)

替换为: margin: $1px

结果:( $1未定义)

margin: px
margin: px
Run Code Online (Sandbox Code Playgroud)


zee*_*wan 46

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

在此输入图像描述


And*_*urg 21

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

$10\10\{10}无法正常工作.