实用科技屋
霓虹主题四 · 更硬核的阅读氛围

Perl正则表达式实战练习题精选

发布时间:2026-01-10 21:50:24 阅读:18 次

在日常的文本处理中,正则表达式是个很趁手的工具。特别是在用 ref="/tag/2034/" style="color:#2B406D;font-weight:bold;">Perl 处理日志分析、数据清洗或者批量替换的时候,写几行正则就能省下半天人工核对的时间。下面几个练习题,都是从实际场景里提炼出来的,适合边敲边练。

匹配邮箱地址

假设你有一堆用户提交的注册信息,需要从中找出符合基本格式的邮箱。一个简单的规则是:用户名部分由字母数字和下划线组成,域名部分包含点号分隔的单词。

my $text = "联系我:user_name123@example.com 或 admin@site.org";
while ($text =~ /(\w+@[a-zA-Z_]+?\.\w+?(\.\w+?)?)/g) {
    print "找到邮箱: $1\n";
}

提取电话号码

中国常见的手机号有11位,以1开头,第二位通常是3到9。固定电话可能带区号,中间有横线分隔。下面这段代码尝试覆盖这两种情况:

my $content = "电话:13812345678,座机:010-87654321,请尽快联系。";
if ($content =~ /(1[3-9]\d{9})/) {
    print "手机: $1\n";
}
if ($content =~ /(\d{3,4}-\d{7,8})/) {
    print "座机: $1\n";
}

清理多余空格

从网页抓下来的数据经常夹杂着各种空白字符——多个空格、制表符甚至换行。用一条正则就能搞定:

my $line = "  这   是  一 段     杂乱 的 文本 \t \n  ";
$line =~ s/\s+/ /g;
$line =~ s/^\s+|\s+$//g;
print "$line\n"; # 输出:这 是 一 段 杂乱 的 文本

验证日期格式

很多系统导出的CSV文件里日期五花八门,比如 2024-04-05 或者 05/04/2024。如果只想挑出标准的 YYYY-MM-DD 格式,可以这样写:

my $date_str = "记录时间:2024-04-05,不合规:05/04/2024";
if ($date_str =~ /(\d{4})-(\d{2})-(\d{2})/) {
    print "捕获到标准日期: 年=$1, 月=$2, 日=$3\n";
}

替换敏感词

做内容审核时,可以用正则把一些关键词替换成星号。比如屏蔽“垃圾”、“广告”这类词:

my $comment = "这条是垃圾评论,含有广告信息,请删除。";
$comment =~ s/(垃圾|广告)/\*\*/g;
print "$comment\n"; # 输出:这条是**评论,含有**信息,请删除。

这些题目看着简单,但真正写脚本时很容易漏掉边界情况。多练几次,遇到复杂文本也能快速上手。建议把每道题改一改再跑一遍,比如让邮箱支持连字符,或者让电话匹配括号格式,熟练了自然就有感觉了。