Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl字符串匹配中/Regex/gm和m/Regex/g之间的差异_Perl - Fatal编程技术网

perl字符串匹配中/Regex/gm和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/是正则表达式匹配运算符。作为快捷方式

perl字符串匹配中($ipaddresult=~/Regex/gm)和($ipaddresult=~m/Regex/g)之间有区别吗?当我在网上搜索时,我会得到第二个而不是第一个的解释。我试图编辑的文件有第一个条件。

是的,
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
是可选的,基本上是多余的。但它们在语义上肯定是等价的。