perl - 使用正则表达式获取子字符串

时间:2013-11-20 17:50:04

标签: regex string perl

我确实知道在这里有很多关于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/;

我一定不能理解如何使用正则表达式,因为这对我不起作用。每个变量最终都是未定义的。我做错了什么?

2 个答案:

答案 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}}会在行尾或结尾处匹配输入