PHP Laravel NGINX html css Bootstrap Python Symfony Apache Windows linux jquery Django ASP vanilla Slim vagrant docker Homestead MySQL Redis Git SVN ssh Root vim PhpStorm Pycharm sass less PHP Laravel android html css Vue Angular React NGINX html css Javascript

PhpStorm 使用Regex(正则)查找并替换文件中的字符串

原创

原创不易 ~ 转载请注明出处哦

PhpStorm中,要查找指定的字符串,我们可以使用Ctrl + F这个快捷键。要查找并替换字符串,我们可以使用Ctrl + R这个快捷键。
然而有时候,我们需要查找并替换一系列字符串中的特定部分,这样手动操作就显得很乏力了。举个例子来说,假设我们有一个模板文件,其中有500个的<img src="img/image-n.jpg">图片标签,其中每一个标签里的image-n都不一样。那么如果我们想将src中的字符串全部替换成{{ asset("images/image-n.jpg") }},现在你可以在脑海里思考一下,如果手动操作这500标签的容易程度。

我们的目标是将每一个img标签中的image-n.jpg这个部分抽取出来,然后在构建新的src字符串时,将抽取出来的字符串添加到{{ asset("images/") }}之中。

那么首先我们需要在Ctrl + R查找并替换字符串的时候,使用Regex,即我们需要勾选右侧的Regex选项。
接着我们需要构建出只选择我们需要的"img/image-n.jpg"这部分的正则表达式:

"img/(.*?)"

好奇.*后面的?是什么意思吗?这个?非常重要,因为它表示我们以non-greedy的方式来查找字符串,即它将匹配最少的字符串。我们对比一下使用了?和没有使用?的区别:

blog.sbot.io - regex - 2.png

可以看到,未使用?的话,我们的正则表达式将匹配到alt="",因为alt=也会被.*所匹配。
使用?的话,我们可以发现,表达式将正好匹配我们需要的字符串:
blog.sbot.io - regex - 3.png

好了,现在我们匹配到了我们需要的字符串,我们需要怎么样进行替换呢?

细心的你一定注意到了我们在.*?之外加上了小括号(())。与php中正则匹配规则一致,我们将img/后的字符串放入了一个group中,这样我们在替换的时候可以使用$1来指代这个group中的内容:
blog.sbot.io - regex - 4.png

是不是很神奇呢?要替换所有500个字符串,我们只需要点击REPLACE ALL就可以了,一键搞定,完美!


正在加载验证码......
请先完成验证