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

标签 regex perl

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

环顾四周后,我发现了一些几乎可以帮助我实现目标的示例,但我似乎无法让它按要求工作。不用说,我是正则表达式的新手。

我已经尝试过这个:

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

结果如下:

this.a.file.name.txt

我尝试修改以下资源中的示例,但我陷入困境。 PHP Regex: Select all except last occurrence Regex not replacing the last occurrence of a match

最佳答案

由于几个原因,您的正则表达式不太正确。首先,您要替换空字符串的内容应该只是句点,而您要从一个句点匹配到下一个句点的所有内容并将其删除。而且,您只执行一次。

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

关于regex - Perl 正则表达式删除除最后一次出现之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14677871/

相关文章:

regex - 如何让正则表达式从字符串的开头开始

perl - 在 perl 脚本中使用环境变量

perl - 我怎样才能阻止 Perl 的 Mail::Box::Manager 删除目录?

javascript - 否定随机正则表达式

python - 检查字符串是否仅包含正则表达式中的字符

regex - 正则表达式片段 : match arbitrary number of groups and transform to CamelCase

perl - 调用 perl 脚本

linux - perl grep 和 cli grep 之间的不一致

python - 在 python 正则表达式中捕获重复的组

regex - awk 匹配时间戳