崇高文本中不贪婪的正则表达式匹配2



我对regex很熟悉,但似乎我不太擅长在sublime text 2中做regex,我认为应该工作的似乎是匹配的,但太贪婪。

我有一个文件,里面有很多mv命令,就像下面的那个,我想在上面添加一个额外的命令来创建文件要移动到的目录。因此,对于下面的示例,mkdir命令将是mkdir --parents --verbose '/path/to/dir2';

mv --no-clobber --verbose '/path/to/dir1/file1.zip' '/path/to/dir2/file2.zip';

我尝试了这个正则表达式,我确信它会非常好,但它匹配整行,而不仅仅是我想匹配的部分。

Sublime regex search

mv --no-clobber --verbose '(.*?).zip' '(.*?)/(.*?).zip';

Sublime正则表达式替换

mkdir --parents --verbose '$2';
mv --no-clobber --verbose '$1.zip' '$2/$3.zip';
编辑:只是为了澄清第一个(.*?)匹配整行,随后的(.*?)不匹配。

您有几个不需要的捕获组,并且没有必要使用.*?

您可以使用以下正则表达式进行搜索:

mv --no-clobber --verbose '[^']+' '(.+)/[^/.]+.zip';

并替换为:

$0nmkdir --parents --verbose '$1';

这里$0mv命令完全匹配的反向引用。

输出:

mv --no-clobber --verbose '/path/to/dir1/file1.zip' '/path/to/dir2/files2.zip';
mkdir --parents --verbose '/path/to/dir2';

您也可以使用K(match reset)搜索:

mv --no-clobber --verbose '[^']+' '(.+)/[^/.]+.zip';K

并替换为:

nmkdir --parents --verbose '$1';

最新更新