Perl 以其强大的正则表达式(Regular Expression)功能闻名,广泛用于文本匹配、提取和替换。本文将介绍Perl正则表达式的语法、操作和实用技巧。
目录
1. 正则表达式概述
Perl 的正则表达式是其核心特性之一,内置于语言中,用于:
- 匹配文本模式。
- 提取数据。
- 替换字符串。
Perl 的正则引擎影响了其他语言(如Python、JavaScript)的实现。
站内链接:了解基础语法,见 Perl 基础语法。
2. 基本语法
字符与元字符
.
:任意字符(除换行符)。*
:0次或多次。+
:1次或多次。?
:0次或1次。\d
:数字。\w
:字母、数字或下划线。\s
:空白字符。
示例
use strict;
use warnings;
my $str = "Perl 5.38";
print "匹配\n" if $str =~ /Perl/; # 匹配
print "数字\n" if $str =~ /\d+/; # 5.38
锚点
^
:字符串开头。$
:字符串结尾。
print "开头\n" if $str =~ /^Perl/; # 开头
print "结尾\n" if $str =~ /38$/; # 结尾
3. 匹配操作
基本匹配
使用 =~
和 m//
:
my $text = "Contact: alice@example.com";
if ($text =~ m/@/) {
print "包含@符号\n";
}
默认变量 $_
$_ = "Hello Perl";
print "找到\n" if /Perl/; # 找到
全局匹配
使用 /g
修饰符:
my $numbers = "12 34 56";
my @matches = $numbers =~ /\d+/g;
print "@matches\n"; # 12 34 56
4. 替换操作
使用 s///
:
基本替换
my $phrase = "I like Perl";
$phrase =~ s/Perl/Python/;
print "$phrase\n"; # I like Python
全局替换
my $list = "cat cat dog";
$list =~ s/cat/bird/g;
print "$list\n"; # bird bird dog
使用捕获组
my $date = "2025-03-25";
$date =~ s/(\d+)-(\d+)-(\d+)/$3.$2.$1/;
print "$date\n"; # 25.03.2025
5. 捕获与分组
捕获组 ()
提取匹配部分:
my $email = "user@domain.com";
if ($email =~ /(\w+)@(.+)/) {
print "用户:$1, 域名:$2\n"; # 用户:user, 域名:domain.com
}
命名捕获(Perl 5.10+)
use feature 'say';
my $time = "12:34:56";
if ($time =~ /(?<hour>\d+):(?<min>\d+):(?<sec>\d+)/) {
say "小时:$+{hour}, 分钟:$+{min}"; # 小时:12, 分钟:34
}
非捕获组 (?:)
仅分组不捕获:
my $word = "bookkeeper";
$word =~ s/(?:ee)/e/g;
print "$word\n"; # bookkeper
6. 修饰符与高级用法
常用修饰符
/i
:忽略大小写。/g
:全局匹配。/m
:多行模式(^
和$
匹配每行)。/s
:单行模式(.
匹配换行符)。
示例
my $case = "PERL perl PeRl";
print "忽略大小写\n" if $case =~ /perl/i; # 匹配
my $multi = "line1\nline2";
print "多行匹配\n" if $multi =~ /^line2/m; # 匹配
lookahead/lookbehind
(?=...)
:正向肯定预查。(?!...)
:正向否定预查。
my $text = "perl5 perl6";
print "找到\n" if $text =~ /perl(?=5)/; # perl5
7. 参考资料
站内链接
出站链接
- Perldoc: Regular Expressions – 官方正则文档。
- Perl Maven: Regex – 正则教程。
- CPAN – 下载正则相关模块。
其他资源
- 《Mastering Regular Expressions》 – 正则权威书籍。
- X社区:搜索 #PerlRegex 获取示例。
这篇指南详细介绍了Perl正则表达式的语法和应用,从基础匹配到高级技巧一应俱全。如果需要更深入的内容(比如性能优化或复杂模式),请告诉我!
发表回复