我确实知道在这里有很多关于perl正则表达式的问题;在我的情况下,我找不到能帮助我的人。我有以下字符串:
string = "dn: example\nl: example\ndepartment: example\nname: example"
我正在尝试使用以下内容提取每个字段(dn除外):
my ($name) = $output_string =~ /name:\s(\w+)\n/;
my ($department) = $output_string =~ /department:\s(\w+)\n/;
my ($location) = $output_string =~ /location:\s(\w+)\n/;
我一定不能理解如何使用正则表达式,因为这对我不起作用。每个变量最终都是未定义的。我做错了什么?
答案 0 :(得分:2)
添加m
标志以打开多行模式,然后使用行首和行尾锚点来匹配字符串中行的开头/结尾:
my ($name) = $output_string =~ /^name:\s(\w+)$/m;
my ($department) = $output_string =~ /^department:\s(\w+)$/m;
my ($location) = $output_string =~ /^location:\s(\w+)$/m;
答案 1 :(得分:1)
这里的问题是你的输入;您希望在\n
之后name:
,但在那里没有location:
,而您正在寻找l:
,但在您的输入中有/m
。
使用$
标记和\n
代替$
将解决第一个问题,因为{{1}}会在行尾或结尾处匹配输入