Perl:在已知位置解析未知值

时间:2012-10-03 21:19:27

标签: regex perl parsing

根据以下文本格式,如何在括号之间获取“用户编号”值?格式相同,但括号内的值会因文件而异。

User name [michael]
User age [25]
User number [2432]
User city [Memphis]

2 个答案:

答案 0 :(得分:1)

解决方案1:

my ($number) = $file_as_string =~ /User number \[(\d+)\]/; 

正则表达式匹配仅在列表上下文中返回捕获的值(这就是为什么my (...)而不仅仅是my ...

解决方案2:

my $number;
$file_as_string =~ /User number \[(\d+)\]/
     and $number = $1;

它还会保存特殊变量$ 1,$ 2等等,但要小心:如果匹配不成功,早期成功匹配的剩余$ 1值可能潜入您的变量(因此and - $ number将除非字符串匹配,否则为undef)。

答案 1 :(得分:0)

要仅检索用户编号,您可以执行以下操作:

/User number \[(\d*)\]/

现在,数字将在第一个捕获组中找到(由parens ()定义)。逃避[]非常重要,因为它们是正则表达式中的特殊字符,表示字符类。