gpt4 book ai didi

regex - 在 Perl 中,if (s/^\+//) 是什么意思?

转载 作者:行者123 更新时间:2023-12-05 08:14:10 24 4
gpt4 key购买 nike

在 Perl/Tk 代码中我发现了如下条件语句

if (s/^\+//)
{
#do something
}
elsif (/^-/)
{
#do another thing
}

似乎已经完成了一些模式匹配。但我无法理解。谁能帮助我理解这种模式匹配?

最佳答案

它们都是正则表达式。您可以在 perlre 阅读它们和 perlretut .您可以在 http://www.rubular.com 上与他们一起玩耍.

它们都隐含地用$_ 做了一些事情。您的代码行周围可能有 whileforeach 而没有循环变量。在这种情况下,$_ 成为该循环变量。例如,它可能包含正在读取的文件的当前行。

  1. 如果 $_ 的当前值包含一个 +(加号)作为字符串开头的第一个字符,#do somehting
  2. 否则,如果它包含一个 -(减号),#do another thing

在第 1 种情况下,它也将 + 符号替换为空(即删除它)。但是,它不会删除 2. 中的 -


让我们看一下 YAPE::Regex::Explain 的解释.

use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new(qr/^\+/)->explain();

在这里。在我们的案例中并不是很有帮助,但仍然是一个很好的工具。请注意,(?-imsx) 部分是 Perl 暗示的默认内容。它们始终存在,除非您更改它们。

The regular expression:

(?-imsx:^\+)

matches as follows:

NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
^ the beginning of the string
----------------------------------------------------------------------
\+ '+'
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------

更新:正如 Mikko L 在评论中指出的那样,您也许应该重构/更改这段代码。虽然它可能会做它应该做的事情,但我相信让它更具可读性是个好主意。写它的人显然不关心你这个后来的维护者。我建议你这样做。您可以将其更改为:

# look at the content of $_ (current line?)
if ( s/^\+// )
{
# the line starts with a + sign,
# which we remove!

#do something
}
elsif ( m/^-/ )
{
# the line starts witha - sign
# we do NOT remove the - sign!

#do another thing
}

关于regex - 在 Perl 中,if (s/^\+//) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13512472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com