我的代码运行良好 - 但我不明白结果。我的目标是确保传入的值是以下格式之一:
PHP:
$str = '12345-6789';
preg_match('/^[0-9]{5}(-?[0-9]{4})?$/', $str, $found);
print_r($found);
返回:
Array
(
[0] => 12345-6789
[1] => -6789
)
为什么我得到第二个结果[1] => -6789
?
谢谢!
答案 0 :(得分:2)
这是因为您使用了(
和)
的抓取组:
$str = '12345-6789';
preg_match('/^[0-9]{5}(-?[0-9]{4})?$/', $str, $found);
// ^ ^
print_r($found);
您可以使用?:
确保其无法捕获:
$str = '12345-6789';
preg_match('/^[0-9]{5}(?:-?[0-9]{4})?$/', $str, $found);
// ^^
print_r($found);
答案 1 :(得分:1)
围绕(-?...
的括号使其被捕获。 $found
的第0个条目包含整个匹配项,每个后续条目包含每个捕获的组。这可能没问题,但如果您绝对不想捕获,可以使用非捕获组:
(?:-?[0-9]{4})?
答案 2 :(得分:1)
-
位于名为()
的{{1}}内,这些块是PHP将返回的匹配项。
capture block