如果值有多个数据,如何使用Perl Regex解析[key = value]

时间:2013-02-06 16:42:02

标签: regex perl

我无法解决下面的问题所以我使用Perl脚本进行解析 没有正则表达式,但我相信它有一个正则表达式。

输入字符串(没有换行符):

ObjectAddress=120.146.128.250,ObjectName=psyseds-tt1y,ObjectClass=SCM F5,ObjectDescription=,Aliases=psyseds-tt1y.site.com.,NameService=A,PTR,DynamicDNSUpdate=A,PTR,CNAME

预期输出

ObjectAddress=120.146.128.250
ObjectName=psyseds-tt1y
ObjectClass=SCM F5
ObjectDescription=
Aliases=psyseds-tt1y.site.com.
NameService=A,PTR
DynamicDNSUpdate=A,PTR,CNAME

我尝试了一些正则表达式来解析字符串,但我无法解析 因为它有多个项目,,分隔值。 例如,NameService有两个值A,PTR。

请帮我构建正则表达式以解析上面的内容。 (.+?=.*?)不会获取多个值。

2 个答案:

答案 0 :(得分:3)

一般情况下,您的格式似乎并不明确 - 类似A=B,C=D的内容可能意味着A映射到BC映射到{{ 1}},或D映射到A - 但是为了得到很好的近似,你可以写:

B,C=D

这将在逗号(my @output = split /,(?=\w+=)/, $input; )上拆分$input,并添加限制,逗号必须后跟一个或多个“字符”(, - 字母,数字,下划线)加上一个等号。 (这称为lookahead assertion。)

答案 1 :(得分:0)

您可以匹配与此正则表达式

(?<=^|,)(?<key>.*?)=(?<value>.*?)(?=,|$)

您现在可以按组名称访问值