如何使用正则表达式来拆分(或匹配)此字符串:
a=1,b=2,c=3,4,5,d=6,e=x,y,z
基本格式为name=value,name=value
,其中值可以包含逗号,名称始终为字母数字。
我试图最终:
a=1
b=2
c=3,4,5
d=6
e=x,y,z
我的第一个想法是语法含糊不清,因为值包含逗号,但我认为它应该可行,因为name不包含=
。
这是关闭的,但会将尾随逗号与每个值匹配,但与最终z
不匹配:
(?<name>\w+)
\s*=\s*
(?<value>
\S
(?:
,
|
.[^=]
)*
)
制作这些比赛:
a=1,
b=2,
c=3,4,5,
d=6,
e=x,y,
这里有正则表达式向导吗?
答案 0 :(得分:3)
您可以使用预见断言在comma
上分开,然后是alphabet
,然后是=
。您可以使用以下正则表达式进行拆分: -
",(?=[a-zA-Z0-9]=)");
答案 1 :(得分:0)
在与,|.[^=]
的最终匹配中,.[^=]
表示任何字符后面跟不是=
的字符。但是,z
后面没有任何内容。相反,你应该使它成为任何字符,然后不是=
或字符串的结尾:
,
|
.(?:[^=]|$)
我已经确认这可以使用php的preg_match_all
。
答案 2 :(得分:0)
如果你的正则表达式引擎支持lookahead assertions,你可以试试这个:
(\w)=(\w(,\w(?!=))*)
注意:我使用\w
缩短了时间。如果您只想匹配字母数字字符,请替换\w
而不是[a-zA-Z0-9]