首页 > 解决方案 > 使用 Perl 打印整个字符串,直到出现子字符串匹配

问题描述

我正在寻找一个快速解决方案,因为我并不真正专注于 perl/regex。

我有一个字符串如下;

abc_def0_ghi4_jkl_mno_pqr_123456.log some_extra_messages 和随机垃圾

我想要一个小的 perl 脚本(不是单行命令)来搜索 .log 文件名,并删除文件末尾的数字。所以输出看起来像

abc_def0_ghi4_jkl_mno_pqr

有什么建议么?

标签: regexperl

解决方案


基于您提供的少量信息的快速(也许是肮脏的)答案:

use strict;
use warnings;

my $str = "abc_def0_ghi4_jkl_mno_pqr_123456.log some_extra_messages and random garbage";

my ($name) = ( $str =~ /^(\w+)_\d+\.log/);
print $name, "\n";

这假定名称位于脚本的开头并且仅包含单词字符(字母、数字、下划线)。它将捕获所有内容,直到它到达一系列数字,前面有一个下划线,后面是.log.


推荐阅读