将在字符串中找到的数字存储在数组中 preg_match
store numbers found in a string in a an array with preg_match
我需要检测在字符串中找到数字的次数。如果字符串是 "1 ssdsdsd 2"
我需要一个包含 [1,2]
的数组。如果字符串是 "1 a"
,我需要一个数组,例如:[1]
。
通过以下尝试,我很接近了,但最终我得到了重复的数字。预匹配似乎更适合我的需要,但也可以重复匹配。
知道这是为什么吗?我很感激有关如何完成此任务的任何建议。
输入
preg_match_all("/([0-9]+)/", trim($s), $matches); //$s = "1 2", output below
//preg_match("/([0-9]+)/", trim($s), $matches); //$s = "1 .", outputs [1,1]
输出
Array
(
[0] => Array
(
[0] => 1
[1] => 2
)
[1] => Array
(
[0] => 1
[1] => 2
)
)
删除捕获组,
preg_match_all("/[0-9]+/", trim($s), $matches);
matches数组的第一个元素是正则表达式的全匹配,第二个元素是捕获组。
您可以选择删除所有非数字字符并获得 strlen()
echo strlen(preg_replace('/[^0-9]/', '', '1 ssdsdsd 2')); // 2 digits
echo strlen(preg_replace('/[^0-9]/', '', '1 ssd324sd567s.d6756 2')); // 12 digits
echo strlen(preg_replace('/[^0-9]/', '', '123456789')); // 9 digits
如果你知道 PHP 字符串字符可以通过它们的索引位置访问,那么你可以使用类似的东西:
echo preg_replace('/[^0-9]/', '', '9 ssdsdsd 5')[0]; // outputs 9 because the resulting string is '95' and position zero's value is 9
preg_split()
是这项工作的理想工具,因为它将 return 平面索引数字数组。
使用 \D+
分解出现的一个或多个非数字字符。使用函数标志确保输出数组中没有空元素——这消除了提前 trim 的需要。
代码:(Demo)
var_export(
preg_split(
'/\D+/',
$s,
0,
PREG_SPLIT_NO_EMPTY
)
);
我需要检测在字符串中找到数字的次数。如果字符串是 "1 ssdsdsd 2"
我需要一个包含 [1,2]
的数组。如果字符串是 "1 a"
,我需要一个数组,例如:[1]
。
通过以下尝试,我很接近了,但最终我得到了重复的数字。预匹配似乎更适合我的需要,但也可以重复匹配。
知道这是为什么吗?我很感激有关如何完成此任务的任何建议。
输入
preg_match_all("/([0-9]+)/", trim($s), $matches); //$s = "1 2", output below
//preg_match("/([0-9]+)/", trim($s), $matches); //$s = "1 .", outputs [1,1]
输出
Array
(
[0] => Array
(
[0] => 1
[1] => 2
)
[1] => Array
(
[0] => 1
[1] => 2
)
)
删除捕获组,
preg_match_all("/[0-9]+/", trim($s), $matches);
matches数组的第一个元素是正则表达式的全匹配,第二个元素是捕获组。
您可以选择删除所有非数字字符并获得 strlen()
echo strlen(preg_replace('/[^0-9]/', '', '1 ssdsdsd 2')); // 2 digits
echo strlen(preg_replace('/[^0-9]/', '', '1 ssd324sd567s.d6756 2')); // 12 digits
echo strlen(preg_replace('/[^0-9]/', '', '123456789')); // 9 digits
如果你知道 PHP 字符串字符可以通过它们的索引位置访问,那么你可以使用类似的东西:
echo preg_replace('/[^0-9]/', '', '9 ssdsdsd 5')[0]; // outputs 9 because the resulting string is '95' and position zero's value is 9
preg_split()
是这项工作的理想工具,因为它将 return 平面索引数字数组。
使用 \D+
分解出现的一个或多个非数字字符。使用函数标志确保输出数组中没有空元素——这消除了提前 trim 的需要。
代码:(Demo)
var_export(
preg_split(
'/\D+/',
$s,
0,
PREG_SPLIT_NO_EMPTY
)
);