3

如何使用正则表达式拆分(或匹配)此字符串:

a=1,b=2,c=3,4,5,d=6,e=x,y,z

基本形式是name=value,name=valuevalue 可以包含逗号并且 name 始终是字母数字。

我试图结束:

a=1
b=2
c=3,4,5
d=6
e=x,y,z

我的第一个想法是语法不明确,因为值包含逗号,但我认为它应该是可行的,因为 name 不包含=.

这很接近,但将尾随逗号与每个值匹配,并且与 final 不匹配z

(?<name>\w+)
\s*=\s*
(?<value>
\S
   (?:
      ,
      |
      .[^=]         
    )*
)

产生这些匹配:

a=1,
b=2,
c=3,4,5,  
d=6,
e=x,y,

这里有任何正则表达式向导吗?

4

3 回答 3

3

您可以使用前瞻断言comma拆分其后跟一个alphabetand then 。您可以使用以下正则表达式进行拆分:-=

",(?=[a-zA-Z0-9]=)");
于 2013-02-05T19:27:35.447 回答
0

在您的最终匹配中,,|.[^=]使用.[^=]表示任何字符后跟一个非字符的字符=。然而,z紧随其后的是什么都没有。相反,您应该将其设为任何字符,后跟非=OR 字符串的结尾:

,
|
.(?:[^=]|$)

我已经确认这可以使用 php 的preg_match_all.

于 2013-02-05T19:25:42.980 回答
0

如果你的正则表达式引擎支持前瞻断言,你可以试试这个:

(\w)=(\w(,\w(?!=))*)

注意:我曾经\w使它更短。如果您只想匹配字母数字字符,请替换\w而不是[a-zA-Z0-9]

在正则表达式上成功运行

编辑:被 Rohit Jain 破坏

于 2013-02-05T19:54:46.133 回答