Perl正则表达式删除除最后一次出现之外的所有

sto*_*ami 2 regex perl

我正在尝试使用命令行"rename"来更改包含多个句点的某些文件名.例如:this.is.a.file.name.txt

看了一下后,我发现了一些几乎让我在那里的例子,但我似乎无法按要求让它工作.毋庸置疑,我是一个非常绿色的初学者,有正则表达式.

我试过这个:

rename -v -n 's/\.(.+?)(?=\.)//' this.is.a.file.name.txt
Run Code Online (Sandbox Code Playgroud)

结果如下:

this.a.file.name.txt
Run Code Online (Sandbox Code Playgroud)

我试图修改以下资源中的示例,但我被卡住了. PHP正则表达式:选择除最后一次出现之外的所有正则 表达式不替换最后一次出现的匹配

Dav*_*d M 5

由于几个原因,你的正则表达式并不完全正确.首先,你用空字符串代替的东西应该只是句号,而你是从句号到下一个句号的所有内容进行匹配并删除它.而且,你只做了一次.

你想要的正则表达式/\.(?=.*\.)//g,它表示匹配一个句点,后面跟着一个零宽度断言任意数量的字符和另一个句点,然后尽可能多地这样做.