perl字符串匹配($ ipAddrResult =〜/ Regex / gm)和($ ipAddrResult = ~m / Regex / g)之间有区别吗?当我在线谷歌时,我会得到第二个的解释而不是第一个。我试图编辑的文件有第一个条件。
答案 0 :(得分:8)
不同地方的m
意味着不同的事情。
让我们先看看第二个例子。
m//
是正则表达式匹配运算符。作为一种捷径,m
可以省略,所以
$foo =~ m/$pattern/;
与
完全相同$foo =~ /$pattern/;
唯一需要m
的情况是,您希望为模式使用/
以外的分隔符。你可以做,例如
$foo =~ m!$pattern!;
或
$foo =~ m[$pattern];
等等,但这些都要求m
在那里。
在第一个示例中,正则表达式之后的m
是修饰符标记,它告诉正则表达式如何表现。正则表达式标志记录在perlre手册页中,可以这样说:
m - 将字符串视为多行。也就是说,改变“^”和“$” 仅在左右两端匹配行的开头或结尾 在字符串中的任何位置匹配它们的字符串。
所以这个:
$foo =~ /$pattern/m;
与此相同:
$foo =~ m/$pattern/m;
与此相同:
$foo =~ m{$pattern}m;
答案 1 :(得分:5)
在表达式
中/Regex/gm
" m"代表多线匹配。在表达式中:
m/Regex/g
" m"代表"匹配"而不是替换,看起来像这样:
s/Regex/replacement/g
因为匹配(与替换)是默认值,所以通常可以省略" m /"从表达的开始。换句话说," m / Regex / g"只是" / Regex / g"的同义词。
答案 2 :(得分:2)
是的,m/regex/g
在语法上等同于/regex/g
。也就是说,它根本不会激活/m
标志。与s/foo/bar/
相比,s/foo/bar/s
与m
完全相同。名称{{1}}代表"匹配"我相信。