给定以下文本格式,如何在括号之间获取“用户编号”值?格式相同,但括号内的值因文件而异。
User name [michael]
User age [25]
User number [2432]
User city [Memphis]
解决方案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 除非字符串匹配)。
要仅检索用户编号,您可以这样做:
/User number \[(\d*)\]/
现在该数字将在第一个捕获组(由括号定义()
)中找到。[
转义and很重要,]
因为它们是正则表达式中的特殊字符,表示字符类。