重复组的正则表达式

Regex expression for reptitive groups

这是为正则表达式专家准备的。我正在尝试为 Cookies 的键值对编写一个正则表达式,它在键前面有一个 =,在值的末尾有一个 ;

所以,基本上 key=value; 应该通过。该字符串可能是重复的,为此它也应该通过。像 key1=value1; key2=value2; 应该通过,

但是除此之外的任何操作都应该失败。 Like key=value1;key=value2;; 应该失败,因为它最后有 2 ;key==valu1;;=value;key=;key=value 等字符串也应该失败。

到目前为止,我一直在学习如何在正则表达式中分组并想出了这个 (?<pat>([a-zA-Z0-9 ]*?=[a-zA-Z0-9\- :]+;))。但这是行不通的。谁能帮帮我?

也许,

^(?:\b[a-z0-9]+=[a-z0-9]+\b;\s*)*$

或一些类似的表达式可能有效。

Demo

测试

$re = '/^(?:\b[a-z0-9]+=[a-z0-9]+\b;\s*)*$/s';
$str = 'key1=value1; key2=value2;';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

var_dump($matches);