$ cmd =〜s @ -fp [^] + @@; Perl是什么意思?

时间:2017-09-19 00:36:31

标签: regex perl

$cmd =~ s@-fp [^ ]+@@;

有没有人让我知道这个正则表达式在Perl中意味着什么? 我通过谷歌搜索找不到上面的任何正则表达式......

2 个答案:

答案 0 :(得分:5)

这将从命令中删除-fp可选参数及其值。

这将采用变量$cmd存储的字符串,并替换匹配-fp [^ ]+的部分。

此命令使用Perl替换(或其他正则表达式修饰符)可以具有任何分隔符的事实。通常写为s/.../.../的内容是s@...@...@。这可能是混乱的根源。

=~binary binding operator,它将左参数作为字符串来执行右参数参数,在本例中为替换。

-fp [^ ]+

  1. -fp 字面上匹配。
  2. [^ ]+匹配一个或多个不是空格的字符。

答案 1 :(得分:0)

让我们先轻松一点。 $cmd =~只是表示“对变量$cmd进行替换。”

并非所有这个表达式都是正则表达式。它实际上是替换运算符 - s/REGEX/STRING/。它匹配REGEX并将其替换为STRING。

与Perl中的许多类似运算符一样,替换运算符允许您选择使用的分隔符。在这种情况下,程序员使用@进行了一些奇怪的选择。

所以,我们有这个:

$cmd =~ s/-fp [^ ]+//;

我们现在知道这意味着。 “将变量$cmd与正则表达式-fp [^ ]+匹配,并将其替换为空字符串”。为什么空字符串?因为替换字符串位(在第二个和第三个/之间)是一个空字符串。

我们现在需要做的就是了解实际的正则表达式 - -fp [^ ]+。而且它并不复杂。

  • -fp - 前四个字符(最多包括空格)与自己匹配。所以这匹配文字字符串“-fp”。
  • [^ ] - 这是一个“角色类”。通常,它表示“匹配[...]内的任何字符”。但是^开头的反转意味着“匹配任何字符期望 [^...]之间的字符。所以这匹配任何不是空格的东西。
  • + - 这是一个修饰符,表示“匹配前一个表达式中的一个或多个”。

所以,放在一起,这是“匹配字符串'-fp'后跟一个或多个非空格字符。

并且,在表达式的其余部分添加,我们得到:

  

查看$cmd中的字符串,如果找到字符串'-fp - '后跟一个或多个非空格字符,则用空字符串替换匹配的部分。