4

我是第一次学习 Perl 和正则表达式,所以如果这是一个愚蠢的问题,我深表歉意。我一直在寻找自己的答案,但找不到任何东西。也许我的部分问题是我真的不知道它叫什么。

我遇到了一段看起来像这样的代码:

$xl_file = "$curr_dir/$xl_file" unless $xl_file =~ ( m!(^[a-z]:)|[/\\]!i );

当我查看 =~ 运算符时,我潜入了正则表达式的漏洞并开始学习。但我只见过“m//”匹配运算符。我假设“m!” 是另一种匹配运算符,但我找不到任何对它的引用来解释它是如何工作的。通过实验,我发现使用它时需要“!i”,但这大约是我能想到的......

有人可以向我解释一下,或者指出一些(免费)材料的方向吗?

4

2 回答 2

6

使用匹配运算符,您可以使用任何类型的分隔符,而不仅仅是/.

因此,以下所有匹配运算符都是有效的并且执行相同的任务:

m//
m!!
m{}
m##

另请注意,如果您将其/用作分隔符,则可以m从头开始删除它。所以,/foo/是有效的,但!foo!不是。

于 2013-06-19T20:19:01.697 回答
4

不,这是完全相同的事情。在 Perl 中,您可以根据需要选择正则表达式分隔符。那是,

m/foo/
/foo/
m!foo!
m"foo"
m+foo+
m xfoox
m{foo}

都是相同的正则表达式(但从不使用问号作为分隔符,它们会唤醒一个古老的恶魔)。

在结束分隔符之后,放置正则表达式修饰符。/i修饰符激活不区分大小写的匹配。

对于完整的爆炸,您可以深入perlre了解 Perl 正则表达式的所有隐藏块。但对于开始,perlretut应该更合适。

于 2013-06-19T20:19:29.730 回答