Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 非常神奇的正则表达式,可以让我替换这些图像吗?_Regex_Vim - Fatal编程技术网

Regex 非常神奇的正则表达式,可以让我替换这些图像吗?

Regex 非常神奇的正则表达式,可以让我替换这些图像吗?,regex,vim,Regex,Vim,我每天使用vim来处理文本和编写代码。然而,每次我必须执行任何替换,或做任何类型的正则表达式工作,这让我发疯,我必须切换到崇高。我想知道,正确的方法是什么: <img src="whatever.png"/> <img src="x.png"/> 我做的什么不对?:%s/“\(.*)”/“/g 双引号超出了主模式。我们想要捕获的所有内容都被放入一个组\(\),因此我们可以稍后通过\1与之关联 如果你使用非常神奇的方法,你必须避开=,因此\vsrc\=(.*.png“。

我每天使用vim来处理文本和编写代码。然而,每次我必须执行任何替换,或做任何类型的正则表达式工作,这让我发疯,我必须切换到崇高。我想知道,正确的方法是什么:

<img src="whatever.png"/>
<img src="x.png"/>
我做的什么不对?

:%s/“\(.*)”/“/g

双引号超出了主模式。我们想要捕获的所有内容都被放入一个组
\(\)
,因此我们可以稍后通过
\1
与之关联


如果你使用非常神奇的方法,你必须避开
=
,因此
\vsrc\=(.*.png“
。因此,用你的方法,答案是:

:%s/\vsrc\="(.*\.png)"/src="<%= image_path("\1") %>"/g
:%s/\vsrc\=“(.\.png)”/src=”“/g
很容易看出您是否设置了hlsearch,然后使用
/
:)

根据,vim中惰性量词的语法与Perl(如regex)中使用的语法不同

让我引用网站上的话:


正如@nhahtdh所述,Vim的regex方言使用
{-}
作为非贪婪量词。如果使用非常神奇的标志,它只是
{-}
。因此,您的命令变成:

:%s/\vsrc="(.{-}.png)/src="<%= asset_path("\1") %>"/g
但是我们仍然可以做得更好!通过使用
\zs
\ze
我们可以避免重新键入
src=“
\zs
\ze
标记将发生替换的匹配的开始和结束

:%s/\vsrc="\zs(.\{-}\.png)"/<%= image_path("\1") %>"/g
有关更多帮助,请参阅以下文档:

:h /\zs
:h /\{-
:h s/\&

不太倾斜的命令:
:%s/src=“\zs.{-}\.png”//g
%s/\vsrc=“\zs.{-}\.png”//g
处于非常神奇的模式。您可能想查找
:h/\zs
:hs/\&
@PeterRincker,这也是我的想法。彼得,你看起来像一个vim的铁杆用户,所以我有一个问题:学习vim的(奇怪的?)正则表达式值得吗?我非常喜欢编辑器,但它的正则表达式支持似乎很不自然,至少对我来说是这样。学会如何最好地使用编辑器几乎总是件好事。我个人并不觉得vim的正则表达式很难。小贴士列表:1)学会爱上
\zs
2)不要忘记
[^”*
patterns 3)Vim有许多正则表达式功能查看
:h regexp
了解更多信息
:%s/\vsrc="(.{-}.png)/src="<%= asset_path("\1") %>"/g
:%s/\vsrc="(.{-}\.png)/src="<%= asset_path("\1") %>"/g
:%s/\vsrc="\zs(.\{-}\.png)"/<%= image_path("\1") %>"/g
:%s/src="\zs.\{-}\.png\ze"/<%= image_path("&") %>/g
:h /\zs
:h /\{-
:h s/\&