重复组的正则表达式
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);
这是为正则表达式专家准备的。我正在尝试为 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);