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

ado*_*ado -5 regex perl

我有一个:

 my ($pid) = ($_ =~ m/^.*\.(\d+)$/);
Run Code Online (Sandbox Code Playgroud)

$ pid匹配什么?

Roh*_*ain 5

你不是$pid在这里匹配,而是$_与正则表达式匹配- 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
/        
Run Code Online (Sandbox Code Playgroud)

因此,如果$_匹配上述模式$pid的值将包含在第一个捕获的组中捕获的值,因为您有一个括号$pid,所以您的匹配操作将在列表上下文中进行评估.

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

# Note you can remove the `m`, if you use `/` as delimiter.
my ($pid) = /^.*\.(\d+)$/   
Run Code Online (Sandbox Code Playgroud)

还有一点需要注意的是,由于您对开头匹配的文本没有任何作用,因此您不需要匹配它.因此,您可以.*完全删除,但在这种情况下,您必须从那里删除插入符号(^).所以,你的正则表达式现在可以替换为:

my $(pid) = /\.(\d+)$/
Run Code Online (Sandbox Code Playgroud)