在 Perl 5 正则中,用于表示字符串开头和字符串结尾的两个表示边界的元字符 ^
和 &
,默认分别只匹配整个字符串的开头和结尾。
举例来说,对于字符字符串 hello\nwordl\n
来说,虽然整个字符串实际上包含了两行文本,但是使用正则 /^./g
只会匹配到字
符 h
,而不会匹配到第二行开头的字符: w
。
在 Perl 5 正则中,若要使 ^
和 $
匹配字符串中的每一行的开头和结尾,那么需要在正则表达式中加入 m
选项。比较下面两
个示例的不同:
1 2 3 4
| my $x = "hello\nworld\n"; $x =~ s $x
|
1 2 3 4
| my $x = "hello\nworld\n"; $x =~ s $x
|
在 Python 中,使用 re.M
或 re.MULTILINE
来获得示例2所演示的特性。比较下面两个示例的不同:
1 2 3 4
| import re x = "hello\nworld\n" re.sub(r"^.", "_", x)
|
1 2 3 4
| import re x = "hello\nworld\n" re.sub(r"^.", "_", x, flags=re.M)
|
Ruby 的正则表达式引擎默认即支持 MULTILINE 模式,因此不需要像 Perl 和Python 中那样指定一个标记:
1 2 3
| x = "hello\nworld\n" x.gsub /^./, '_'
|