以下是我用来捕获秒的脚本
use strict;
use warnings;
my $n='Created posting 187294181 (sny/sny_AF8F46748A50416A9F1FF2BD7) in 0.261 secs';
my $m='Created posting 187294183';
if($n=~/Created\s+(resume|posting)\s+(\d+).*?([\d\.]*)/i)
{
print "$1 $2 $3\n";
}
我得到3美元的空白。任何人都可以帮助我在正则表达式中做了什么错误来捕获秒。$ m和$ n应该匹配正则表达式。
输出:
posting 187294181
答案 0 :(得分:1)
使用此正则表达式:
(resume|posting) (\d+)(?:.*?in ([\d.]+) secs)?
在the demo中,检查右侧窗格中的捕获组。
在您的Perl代码中:
if ($subject =~ m/(resume|posting) (\d+)(?:.*?in ([\d.]+) secs)?/i) {
# We matched!
print "$1 $2";
# Is Group 3 set?
if (defined $3) { print "$3"; }
print "\n";
}
<强>解释强>
(resume|posting)
会将resume
或posting
捕获到第1组。(\d+)
将数字捕获到第2组。(?:
打开我们的可选非捕获组.*?
懒惰地将字符匹配到.... in
,然后([\d.]+)
我们抓住了第3组的时间secs
)?
关闭非捕获组并使其成为可选