1

编码:

#!/usr/bin/perl
my $string="string\nstring2\nstring3";
print "$string\n-----\n";
$string=~s/^.*$/_/;
print "$string\n-----\n";

输出:

string
string2
string3
-----
string
string2
string3
-----

预期产出:

1:

string
string2
string3
-----
_
-----

2:

string
string2
string3
-----
_
string2
string3
-----

3:(如 /m 修饰符):

string
string2
string3
-----
_
_
_
-----

问题:为什么没有/m ^..$破坏了东西?我在正则表达式文档中错过了什么?

4

2 回答 2

4
  • /s导致.匹配换行符。
  • /m原因^$匹配行的开始和结束,而不是输入的开始和结束。
  • /g导致所有匹配被替换。

所以,

  • 你可以得到(1)使用s/^.*$/_/s;
  • 你可以得到(2)使用s/^.*$/_/m;
  • 您可以使用 (3)s/^.*$/_/mg;
于 2012-10-24T01:54:38.233 回答
2

使用s修饰符:

将字符串视为单行。即改“.”。匹配任何字符,甚至是换行符,通常它不会匹配。

$string=~s/^.*$/_/s;
于 2012-10-24T01:37:16.183 回答