我正在玩Perl并试图更好地理解其子串/正则表达式功能。
说我有一个字符串,如
[48:31.8]已发送:> 33 * 1311875297587 * eval * 0 * frame [0] *“A”<
并想要返回1311875297587.它将始终采用该格式。我如何使用Perl做到这一点?
由于
答案 0 :(得分:10)
假设“[48:31.8] ...”在$ string中,那么:
my ($number) = $string =~ /\*(\d+)\*eval\*/;
如果字符串不匹配, $number
将被定义,否则它将包含"*"
和"*eval*"
之间的数字。
答案 1 :(得分:2)
if ($str =~ /\*(\d+)\*/ ) {
print $1;
}
答案 2 :(得分:1)
my ($num) = '>33*1311875297587*eval*0*frame[0]*"A"<' =~ /(\d{3,})/;
print $num;
答案 3 :(得分:0)
对于它的价值,我认为这是一个更有力的答案:
while(<STDIN>)
{
@fields = split(/\*/,$1) if(/(?<=>)([^<>])+(?><)/);
print "$fields[1]\n";
}
如果您需要,可以访问所有字段,并且不依赖于固有顺序来解析特定字段。
用你想要的任何逐行迭代替换while
循环。但是,要进行测试,请将其作为Perl脚本运行,然后粘贴到行[48:31.8] Sent: >33*1311875297587*eval*0*frame[0]*"A"<
或其他任何内容中。