Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
Regex Perl:m/^.*\.(\d+)$/是什么意思?_Regex_Perl - Fatal编程技术网

Regex Perl:m/^.*\.(\d+)$/是什么意思?

Regex Perl:m/^.*\.(\d+)$/是什么意思?,regex,perl,Regex,Perl,我有一个: my ($pid) = ($_ =~ m/^.*\.(\d+)$/); $pid匹配的是什么?这里没有匹配$pid,而是将$匹配到regex-m/^.*\.\d+$/。 $pid将存储将$\与正则表达式模式匹配的结果 下面是对正则表达式模式的解释: m/ # Delimiter ^ # Match beginning of string .* # Match 0 or more repetition of any character exce

我有一个:

 my ($pid) = ($_ =~ m/^.*\.(\d+)$/);
$pid匹配的是什么?

这里没有匹配$pid,而是将$匹配到regex-m/^.*\.\d+$/。 $pid将存储将$\与正则表达式模式匹配的结果

下面是对正则表达式模式的解释:

m/       # Delimiter
   ^     # Match beginning of string
   .*    # Match 0 or more repetition of any character except a newline
   \.    # Match a dot (.)
   (     # Start a capture group
     \d+ # Match 1 or more repetition of digits.
   )     # Close capture group
   $     # Match end of string
/        
因此,如果$\中的值与上述模式匹配,$pid将包含在第一个捕获组中捕获的值,因为$pid周围有一个括号,所以匹配操作将在列表上下文中进行计算

您的匹配实际上与以下内容相同:

# Note you can remove the `m`, if you use `/` as delimiter.
my ($pid) = /^.*\.(\d+)$/   
还有一点需要注意的是,由于您没有对开头匹配的文本执行任何操作,因此您实际上不需要匹配它。因此,您可以完全删除。*,但在这种情况下,您必须从中删除插入符号^。因此,您的正则表达式现在可以替换为:

my $(pid) = /\.(\d+)$/

实际上,$pid将包含第一个捕获组,因为$pid周围的参数使其成为列表分配,因此在列表上下文中计算=~。@llmari。哎呀。错过了。若要再挑几个细节,上面的句子应该是string,and。将匹配除换行符以外的任何字符,因为未使用/s开关。不过,那可能是一只虫子。假设是这样的话,整个过程可以写得更简洁,比如我的$pid=$\u=~/\.\ d+$/;,甚至只是我的$pid=/\。\d+$/;。另外,$还可以匹配字符串末尾换行符前的位置。@IlmariKaronen。好吧,让我重新构造我的答案@伊尔马里卡罗宁。现在重构我的答案:对于上一条语句,$始终匹配字符串末尾换行符之前的位置,除非我们讨论的是多行匹配,对吗?