Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 下面的代码是做什么的?_Perl - Fatal编程技术网

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是独角兽:-没有,我刚开始。