推荐答案
在 Perl 中,正则表达式的修饰符(Modifier)用于改变正则表达式的匹配行为。常见的修饰符包括:
i
:忽略大小写。m
:多行模式,使^
和$
匹配每行的开头和结尾。s
:单行模式,使.
匹配包括换行符在内的所有字符。x
:允许在正则表达式中使用空白和注释。o
:仅编译一次正则表达式。g
:全局匹配,匹配所有可能的模式。c
:在全局匹配失败后保持上一次匹配的位置。e
:将替换部分作为 Perl 代码执行。
本题详细解读
i
修饰符
i
修饰符用于忽略大小写。例如,/foo/i
可以匹配 "foo"、"FOO"、"Foo" 等。
m
修饰符
m
修饰符用于多行模式。在多行模式下,^
和 $
分别匹配每行的开头和结尾,而不是整个字符串的开头和结尾。例如,/^foo/m
可以匹配多行字符串中每一行以 "foo" 开头的部分。
s
修饰符
s
修饰符用于单行模式。在单行模式下,.
可以匹配包括换行符在内的所有字符。例如,/foo.*bar/s
可以匹配 "foo" 和 "bar" 之间的任意字符,包括换行符。
x
修饰符
x
修饰符允许在正则表达式中使用空白和注释,使得正则表达式更易读。例如:
/foo # 匹配 foo bar # 匹配 bar /x
o
修饰符
o
修饰符用于仅编译一次正则表达式。这在正则表达式不会改变的情况下可以提高性能。例如:
my $pattern = qr/foo/o;
g
修饰符
g
修饰符用于全局匹配。它会匹配所有可能的模式,而不是在第一次匹配成功后停止。例如:
my @matches = "foo bar foo" =~ /foo/g;
c
修饰符
c
修饰符用于在全局匹配失败后保持上一次匹配的位置。这在需要连续匹配时非常有用。例如:
while ("foo bar" =~ /foo/gc) { # 匹配成功后继续匹配 }
e
修饰符
e
修饰符用于将替换部分作为 Perl 代码执行。例如:
s/(\d+)/$1 * 2/e;
这会将匹配的数字乘以 2。