perl字符串匹配中/ Regex/gm和m/Regex/g之间的差异

use*_*651 12 perl

在perl字符串匹配中($ ipAddrResult =〜/ Regex/gm)和($ ipAddrResult = ~m/Regex/g)之间是否存在差异?当我在线谷歌时,我会得到第二个的解释而不是第一个.我试图编辑的文件有第一个条件.

fri*_*edo 9

m不同地方的s意味着不同的东西.

我们先来看第二个例子.

m//是正则表达式匹配运算符.作为捷径,m可以省略,所以

$foo =~ m/$pattern/;
Run Code Online (Sandbox Code Playgroud)

与...完全相同

$foo =~ /$pattern/;
Run Code Online (Sandbox Code Playgroud)

唯一m需要的时间是你想要使用除/模式之外的分隔符.例如,你可以这样做

$foo =~ m!$pattern!;
Run Code Online (Sandbox Code Playgroud)

要么

$foo =~ m[$pattern];
Run Code Online (Sandbox Code Playgroud)

等等,但这些都需要在m那里.

在第一个例子中,m正则表达式之后是一个修饰符标志,它告诉正则表达式如何表现.perlre手册页中记录了正则表达式标志,可以这样说:

m - 将字符串视为多行.也就是说,改变"^"和"$"仅匹配字符串左端和右端的行的开头或结尾,以匹配字符串中的任何位置.

所以这:

$foo =~ /$pattern/m;
Run Code Online (Sandbox Code Playgroud)

与此相同:

$foo =~ m/$pattern/m;
Run Code Online (Sandbox Code Playgroud)

和这个一样:

$foo =~ m{$pattern}m;
Run Code Online (Sandbox Code Playgroud)


Dav*_*idM 5

在表达中

/Regex/gm
Run Code Online (Sandbox Code Playgroud)

“ m”代表多行匹配。在表达式中:

m/Regex/g
Run Code Online (Sandbox Code Playgroud)

“ m”代表“匹配”,而不是替代,看起来像这样:

s/Regex/replacement/g
Run Code Online (Sandbox Code Playgroud)

因为默认情况下匹配(相对于替换),所以通常可以在表达式的开头省略“ m /”。换句话说,“ m / Regex / g”只是“ / Regex / g”的同义词。


tri*_*eee 3

是的,m/regex/g在语法上等同于 just /regex/g。也就是说,它/m根本不激活该标志。与哪个相比s/foo/bar/根本不一样s/foo/bar/s。我相信这个名字m代表“匹配”。