提问人:AeroMaxx 提问时间:6/10/2022 最后编辑:AeroMaxx 更新时间:6/10/2022 访问量:38
崇高文本中的不贪婪正则表达式匹配 2
Ungreedy regex matching in sublime text 2
问:
我对正则表达式相当熟悉,但似乎我不太擅长在崇高文本 2 中做正则表达式,我认为应该起作用的东西似乎匹配但太贪婪了。
我有一个包含许多命令的文件,如下所示,我想在其上方添加一个附加命令以创建要将文件移动到的目录。因此,对于以下示例,命令将是mv
mkdir
mkdir --parents --verbose '/path/to/dir2';
mv --no-clobber --verbose '/path/to/dir1/file1.zip' '/path/to/dir2/file2.zip';
我尝试了这个正则表达式,我确信它会很好,但它与整行匹配,而不仅仅是我想要匹配的部分。
崇高的正则表达式搜索
mv --no-clobber --verbose '(.*?).zip' '(.*?)/(.*?).zip';
崇高的正则表达式替换
mkdir --parents --verbose '$2';
mv --no-clobber --verbose '$1.zip' '$2\/$3.zip';
编辑:只是为了澄清第一个匹配整行,后面匹配什么都没有。(.*?)
(.*?)
答:
0赞
anubhava
6/10/2022
#1
您几乎没有不需要的捕获组,因此无需使用 ..*?
您可以使用以下正则表达式进行搜索:
mv --no-clobber --verbose '[^']+' '(.+)/[^/.]+\.zip';
并使用以下方法替换:
$0\nmkdir --parents --verbose '$1';
这是命令完全匹配的反向引用。$0
mv
输出:
mv --no-clobber --verbose '/path/to/dir1/file1.zip' '/path/to/dir2/files2.zip';
mkdir --parents --verbose '/path/to/dir2';
您还可以使用(匹配重置)进行搜索:\K
mv --no-clobber --verbose '[^']+' '(.+)/[^/.]+\.zip';\K
并替换为:
\nmkdir --parents --verbose '$1';
评论
mv --no-clobber --verbose '([^']*)' '([^']*)/([^']*)';