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。好吧,让我重新构造我的答案@伊尔马里卡罗宁。现在重构我的答案:对于上一条语句,$始终匹配字符串末尾换行符之前的位置,除非我们讨论的是多行匹配,对吗?