为什么preg_match匹配多个空字符串
Why does preg_match match multiple empty strings
为什么会出现以下正则表达式:
$regex = '^([abc]+)$|^([012]+)$|^([23]+)$|^([123]+)$';
$toMatch = '123';
preg_match('/'.$regex.'/', $toMatch, $matches);
得出这个结果:
array(5) {
[0]=>
string(3) "123"
[1]=>
string(0) ""
[2]=>
string(0) ""
[3]=>
string(0) ""
[4]=>
string(3) "123"
}
为什么元素 1,2 和 3 是空字符串,而它们不匹配任何内容?怎么会有 "empty" 个匹配项?
提前致谢
您试图使用 ()
语法捕获 4 个不同的东西。因此,$matches
数组中将有 4 个不同的元素。只有最后一次捕获才会匹配字符串 123
(^[123]+$
).
您收到 3 个空元素,因为您的前三个捕获组 ([abc]+)
、([012]+)
和 ([23]+)
没有匹配任何内容。
如果您只想要一个捕获组,您可以像这样更新您的正则表达式:
preg_match('/^([abc]+|[012]+|[23]+|[123]+)$/', '123', $match);
哪个会给你:
array(2) {
[0]=>
string(3) "123"
[1]=>
string(3) "123"
}
为什么会出现以下正则表达式:
$regex = '^([abc]+)$|^([012]+)$|^([23]+)$|^([123]+)$';
$toMatch = '123';
preg_match('/'.$regex.'/', $toMatch, $matches);
得出这个结果:
array(5) {
[0]=>
string(3) "123"
[1]=>
string(0) ""
[2]=>
string(0) ""
[3]=>
string(0) ""
[4]=>
string(3) "123"
}
为什么元素 1,2 和 3 是空字符串,而它们不匹配任何内容?怎么会有 "empty" 个匹配项?
提前致谢
您试图使用 ()
语法捕获 4 个不同的东西。因此,$matches
数组中将有 4 个不同的元素。只有最后一次捕获才会匹配字符串 123
(^[123]+$
).
您收到 3 个空元素,因为您的前三个捕获组 ([abc]+)
、([012]+)
和 ([23]+)
没有匹配任何内容。
如果您只想要一个捕获组,您可以像这样更新您的正则表达式:
preg_match('/^([abc]+|[012]+|[23]+|[123]+)$/', '123', $match);
哪个会给你:
array(2) {
[0]=>
string(3) "123"
[1]=>
string(3) "123"
}