也许我做错了:我写了这个,等待正则表达式中包含可选匹配项。
preg_match('/^(\d+)([A-Z]+)?-(\d+)?([A-Z]+)?$/i', $groupe, $matches);
list($match, $debutChiffre, $debutLettre, $finChiffre, $finLettre) = $matches;
因此,匹配2、3和4是可选的。如果2为空但3不为空,则2将为空数组。但是最后一个可选项是否为空,没有$matches[4]
。如果3和4都为空,则它在$matches[2]
处停止。我本来希望为每个括号都留一个空字符串,因为在此之后,list()
每次$matches[4]
不存在时都会返回一条通知,因此它会尝试将不存在的值放入$finLettre
中
要删除这些通知,有没有比在list()
之前添加此通知更好的方法了?
if (!isset($matches[4])) $matches[4] = "";
编辑:我虽然正则表达式就足够了,但是如果需要示例的话:
5A-9B
将给出一个$matches
数组,其中包含5个元素(完全匹配和4个括号)。
5-9B
将给出一个包含5个元素的$matches
数组($matches[2]
是一个空字符串,因为没有字母)
5A-9
将给出一个包含4个元素的$matches
数组(preg_match
会忽略最后一个不匹配的括号,而如果后面有至少一个匹配的术语与之保持一致,则会放置空字符串括号顺序)
5-
将给出一个包含2个元素的$matches
数组。
由于此行为,下一个list()
将获得未设置的变量并因此而引起注意。
答案 0 :(得分:1)
您可以合并$matches
到具有默认值的数组。因此,如果匹配成功,它将替换默认值:
<?php
preg_match('/^(\d+)([A-Z]+)?-(\d+)?([A-Z]+)?$/i', $groupe, $matches);
$matches = $matches + [[], '', '', '', ''];
list($match, $debutChiffre, $debutLettre, $finChiffre, $finLettre) = $matches;
这样,您可以拥有没有警告的代码:)