正则表达式匹配名称值对

时间:2015-04-09 22:32:15

标签: regex

我试图提出一个与名称=值对匹配的正则表达式。

pet=dog  (valid)
pet=dog&fruit=apple (valid)

pet=dog& (invalid - & must be followed by name value pair)
pe t=dog (invalid - space in name)
pet=d og (invalid - space in value)
pet=dog&&fruit=apple (invalid - two & signs)
pet=dog=cat&fruit=apple (invalid - two = signs before new name value pair)
pet==dog (invalid two = signs)

2 个答案:

答案 0 :(得分:0)

假设您不需要支持转义,并且除了&之外的名称或值中没有无效字符。和=,你可以沿着这些方向使用:

^([^&= ]+)=([^&= ]+)(&([^&= ]+)=([^&= ]+))*$

即:字符串的开头,捕获一个或多个不是&的字符。或=,然后a =,然后捕获一个或多个不是&的字符。或=;然后捕获零个或多个重复的整个第一个表达式,前缀为&符号,然后是字符串的结尾。

或者换句话说,必须至少有一个名称 - 值对,如果有多个,后续的名称 - 值对必须以&符号开头,并且可以有任意数量的符号。在匹配的表达式之前或之后都不会出现任何内容(这可以防止字符串以&或=开头或结尾)。

小提琴:http://refiddle.com/refiddles/5526ffa775622d1ecba40100

答案 1 :(得分:0)

你可以使用这样的正则表达式:

^\w+=\w+(?:&\w+=\w+)*$

<强> Working demo

Regular expression visualization

enter image description here