我试图提出一个与名称=值对匹配的正则表达式。
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)
答案 0 :(得分:0)
假设您不需要支持转义,并且除了&之外的名称或值中没有无效字符。和=,你可以沿着这些方向使用:
^([^&= ]+)=([^&= ]+)(&([^&= ]+)=([^&= ]+))*$
即:字符串的开头,捕获一个或多个不是&的字符。或=,然后a =,然后捕获一个或多个不是&的字符。或=;然后捕获零个或多个重复的整个第一个表达式,前缀为&符号,然后是字符串的结尾。
或者换句话说,必须至少有一个名称 - 值对,如果有多个,后续的名称 - 值对必须以&符号开头,并且可以有任意数量的符号。在匹配的表达式之前或之后都不会出现任何内容(这可以防止字符串以&或=开头或结尾)。
答案 1 :(得分:0)