Perl 以其强大的正则表达式(Regular Expression)功能闻名,广泛用于文本匹配、提取和替换。本文将介绍Perl正则表达式的语法、操作和实用技巧。


目录

  1. 正则表达式概述
  2. 基本语法
  3. 匹配操作
  4. 替换操作
  5. 捕获与分组
  6. 修饰符与高级用法
  7. 参考资料

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. 参考资料

站内链接

出站链接

其他资源

  • 《Mastering Regular Expressions》 – 正则权威书籍。
  • X社区:搜索 #PerlRegex 获取示例。

这篇指南详细介绍了Perl正则表达式的语法和应用,从基础匹配到高级技巧一应俱全。如果需要更深入的内容(比如性能优化或复杂模式),请告诉我!