Perl 下面的代码是做什么的?
这下面是做什么的?谁能给我解释一下吗Perl 下面的代码是做什么的?,perl,Perl,这下面是做什么的?谁能给我解释一下吗 $data = "What is the STATUS of your mind right now?"; $data =~/.*/; print "$1,$2\n"; $data =~/(.*?)(u+).*/; print "$1, $2\n"; $data =~/(.?)(u+).*/; print "$1, $2\n"; $data =~/(\w+\s)+/; print "$1, $2\n"; 什么是$1和$2?这是如何得到它的价值的?这
$data = "What is the STATUS of your mind right now?";
$data =~/.*/; print "$1,$2\n";
$data =~/(.*?)(u+).*/; print "$1, $2\n";
$data =~/(.?)(u+).*/; print "$1, $2\n";
$data =~/(\w+\s)+/; print "$1, $2\n";
什么是$1和$2
?这是如何得到它的价值的?这些正则表达式是什么
提前感谢:)请阅读,这将回答您的所有问题
Perl正则表达式的一般参考是,但您应该先阅读教程,因为它是一个更好的介绍。请阅读,它将回答您的所有问题
Perl正则表达式的一般参考是,但您应该先阅读教程,因为它是一个更好的介绍。
$1
和$2
是匹配的变量。它们指的是最后一个正则表达式中匹配组的各种括号中匹配的内容
$1
包含在第一个括号组中匹配的字符串部分<代码>$2包含在第二个括号组中匹配的字符串部分。你可以猜出3美元将包含什么
让我们看看您的示例:
$data = "What is the STATUS of your mind right now?";
$data =~/.*/; print "$1,$2\n";
这里没有括号,因此$1和$2不包含任何内容
$data =~/(.*?)(u+).*/; print "$1, $2\n";
这里有两个括号组。第一个是(.*?
,它不匹配任何内容或任何可以匹配的内容(以非贪婪的方式,但这是另一个主题)。第二个是(u+)
,它匹配一个或多个*“u”*s
<> >第一个(唯一)“U”在<代码> $数据>代码>位于“你”的中间,所以<代码> $ 1 <代码>匹配直到第一个“U”,并且<代码> $2 < /> >匹配一个“u”。< /P>
现在第一组是(.?)
,它匹配一个字符,或者不匹配。然后,(u+
再次匹配一个或多个*“u”*s
因为我们的字符串中只有一个“u”,所以第一组将是它前面的一个字符,即“o”,第二组将匹配实际的“u”
最后,第一组匹配(\w++\s)+
,这是一个或多个“word”字符,后跟一个空白字符。“Word”字符是任何字母数字字符或下划线。没有第二组,但有一个+
(一个或多个)符号
那么它与什么相匹配呢?这是一个奇怪的问题,我不确定我的理解是否100%准确。由于整个匹配组都有+
,因此它将尽可能多地吸收字符串,并且仍然匹配\w+\s
。在这种情况下,它可以忽略所有内容,直到“正确”为止,然后匹配为$1
然后,因为它有+
,它会立即查找更多匹配项,但由于“right”是最右边的匹配字符串,因此它永远不会找到另一个组匹配项
因此,$1
是“正确的”,而$2
是空的
摘要:
$data = "What is the STATUS of your mind right now?";
$data =~/.*/; print "$1,$2\n";
当您看到$1和$2时,应该在最后一个正则表达式中查找匹配的组括号。
$1
和$2
是匹配的变量。它们指的是最后一个正则表达式中匹配组的各种括号中匹配的内容
$1
包含在第一个括号组中匹配的字符串部分<代码>$2包含在第二个括号组中匹配的字符串部分。你可以猜出3美元将包含什么
让我们看看您的示例:
$data = "What is the STATUS of your mind right now?";
$data =~/.*/; print "$1,$2\n";
这里没有括号,因此$1和$2不包含任何内容
$data =~/(.*?)(u+).*/; print "$1, $2\n";
这里有两个括号组。第一个是(.*?
,它不匹配任何内容或任何可以匹配的内容(以非贪婪的方式,但这是另一个主题)。第二个是(u+)
,它匹配一个或多个*“u”*s
<> >第一个(唯一)“U”在<代码> $数据>代码>位于“你”的中间,所以<代码> $ 1 <代码>匹配直到第一个“U”,并且<代码> $2 < /> >匹配一个“u”。< /P>
现在第一组是(.?)
,它匹配一个字符,或者不匹配。然后,(u+
再次匹配一个或多个*“u”*s
因为我们的字符串中只有一个“u”,所以第一组将是它前面的一个字符,即“o”,第二组将匹配实际的“u”
最后,第一组匹配(\w++\s)+
,这是一个或多个“word”字符,后跟一个空白字符。“Word”字符是任何字母数字字符或下划线。没有第二组,但有一个+
(一个或多个)符号
那么它与什么相匹配呢?这是一个奇怪的问题,我不确定我的理解是否100%准确。由于整个匹配组都有+
,因此它将尽可能多地吸收字符串,并且仍然匹配\w+\s
。在这种情况下,它可以忽略所有内容,直到“正确”为止,然后匹配为$1
然后,因为它有+
,它会立即查找更多匹配项,但由于“right”是最右边的匹配字符串,因此它永远不会找到另一个组匹配项
因此,$1
是“正确的”,而$2
是空的
摘要:
$data = "What is the STATUS of your mind right now?";
$data =~/.*/; print "$1,$2\n";
当您看到$1和$2时,您应该在最后一个正则表达式中查找匹配的组括号。@Nitesh:这个问题在我链接到的文档的一节中得到了回答。@Nitesh:它们被称为反向引用。你读过链接了吗?@BoltClock是独角兽:-没有,我刚开始。@Nitesh:这个问题在我链接到的文档的一节中得到了回答。@Nitesh:它们被称为反向引用。你看过链接了吗?@BoltClock是独角兽:-没有,我刚开始。