我该如何正则表达式与此格式匹配?
a1 = q1,a2 = q2,a3 = q3,a4 = q4 (这是正确的示例,字符将为utf-8)
a1 = q1,a2 = q2,a3 = q3,a4 = q4,(错误的样本)
如果字符串的最后一个逗号是字符,如何在正则表达式中排除最后一个逗号?
我的示例php代码是:
$pattern="/^(\p{L}\=\p{L},?)*$/u";
$string1="a1=q1,a2=q2,a3=q3,a4=q4"; //correct
$string2="a1=q1,a2=q2,a3=q3,a4=q4,"; //incorrect
if (preg_match($pattern,$string1,$m)) { echo "correct"; } else { echo "incorrect"; }
if (preg_match($pattern,$string2,$m)) { echo "correct"; } else { echo "incorrect"; }
答案 0 :(得分:2)
答案 1 :(得分:1)
我的猜测是这种表达方式
(?!.*,$)([\p{L}\p{N}]+=[\p{L}\p{N}]+),?
可能在这里工作
(?!.*,$)
我们只需添加一个不以逗号结尾的语句。
该表达式在this demo的右上角进行了说明,如果您想进一步探索或修改它,在this link中,您可以逐步观察它如何与某些示例输入匹配步骤,如果您愿意的话。
$re = '/(?!.*,$)([\p{L}\p{N}]+=[\p{L}\p{N}]+),?/m';
$str = 'a1=q1,a2=q2,a3=q3,a4=q4
a1=q1,a2=q2,a3=q3,a4=q4,';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump($matches);