Regex 匹配名称-值对的正则表达式

Regex 匹配名称-值对的正则表达式,regex,Regex,我试图找到一个正则表达式,它将匹配name=value对 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 (inv

我试图找到一个正则表达式,它将匹配name=value对

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)

假设您不需要支持转义,并且名称或值中除了&和=,没有无效字符,您可以使用以下内容:

^([^&= ]+)=([^&= ]+)(&([^&= ]+)=([^&= ]+))*$
即:从字符串开始,捕获一个或多个非&or=,然后是an=,然后捕获一个或多个非&or=;然后捕获以符号为前缀的整个第一个表达式的零次或多次重复,然后捕获字符串的结尾

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


Fiddle:

您可以使用如下正则表达式:

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

干得好。您可能知道如何成为正则表达式专家的任何好的来源吗?捕获&&&&&&&&.@jac0117您可以从中学习这是一个很好的方法page@l好吧,那也是有效的。但如果您只需要单词字符,则可以通过[A-Za-z]更改\w