perl字符串匹配中/Regex/gm和m/Regex/g之间的差异
perl字符串匹配中($ipaddresult=~/Regex/gm)和($ipaddresult=~m/Regex/g)之间有区别吗?当我在网上搜索时,我会得到第二个而不是第一个的解释。我试图编辑的文件有第一个条件。是的,perl字符串匹配中/Regex/gm和m/Regex/g之间的差异,perl,Perl,perl字符串匹配中($ipaddresult=~/Regex/gm)和($ipaddresult=~m/Regex/g)之间有区别吗?当我在网上搜索时,我会得到第二个而不是第一个的解释。我试图编辑的文件有第一个条件。是的,m/regex/g在语法上等同于/regex/g。也就是说,它根本不会激活/m标志。与s/foo/bar/相比,它与s/foo/bar/s完全不同。我相信,m这个名字代表“匹配”。不同地方的ms意味着不同的东西 让我们先来看第二个例子 m/是正则表达式匹配运算符。作为快捷方式
m/regex/g
在语法上等同于/regex/g
。也就是说,它根本不会激活/m
标志。与s/foo/bar/
相比,它与s/foo/bar/s
完全不同。我相信,m
这个名字代表“匹配”。不同地方的m
s意味着不同的东西
让我们先来看第二个例子
m/
是正则表达式匹配运算符。作为快捷方式,m
可以省略,因此
$foo =~ m/$pattern/;
完全一样
$foo =~ /$pattern/;
唯一需要使用m
的时间是,如果要为模式使用除/
以外的分隔符。例如,你可以这样做
$foo =~ m!$pattern!;
或
以此类推,但这些都需要m
在第一个示例中,正则表达式后面的m
是一个修饰符标志,它告诉正则表达式如何操作。regex标志记录在手册页中,手册页上有以下内容:
m-
将字符串视为多行。即,将“^”和“$”更改为
仅在线路的左右两端匹配线路的起点或终点
该字符串将在字符串中的任何位置匹配它们
因此:
$foo =~ /$pattern/m;
与此相同:
$foo =~ m/$pattern/m;
$foo =~ m{$pattern}m;
与此相同:
$foo =~ m/$pattern/m;
$foo =~ m{$pattern}m;
在表达式中
/Regex/gm
“m”代表多行匹配。在表达式中:
m/Regex/g
“m”代表“匹配”,而不是替换,如下所示:
s/Regex/replacement/g
因为匹配(vs.替换)是默认值,所以通常可以从表达式的开头去掉“m/”。换句话说,“m/Regex/g”只是“/Regex/g”的同义词。当输入包含换行符时,
\m
修饰符很重要。例如:“foo\nbar\n”=~/foo$/
为假,但“foo\nbar\n”=~/foo$/m
为真。妮特:这是语义对等,而不是语法对等。嗯,我想说的是,首字母m
是可选的,基本上是多余的。但它们在语义上肯定是等价的。