使用 preg_grep() 函数可以直接对数组进行正则过滤,它会返回一个包含所有匹配正则表达式模式的数组元素的新数组。只需传入正则模式字符串和待处理的数组作为参数,该函数会自动遍历数组并保留匹配项,忽略不匹配项。

如何过滤出以特定前缀开头的字符串
要筛选出以特定前缀(如 "user_")开头的字符串,可以将正则表达式设置为锚定开头的模式。例如,使用 /^user_.*$/ 可以匹配所有以 "user_" 开头且后跟任意字符的字符串。调用 preg_grep('/^user_.*$/', $array) 将返回仅包含符合条件元素的数组。

$input = ['user_admin', 'guest_user', 'user_01', 'admin_user', 'user_test'];
$result = preg_grep('/^user_.*$/', $input);
print_r($result);
预期输出:
Array
(
[0] => user_admin
[2] => user_01
[4] => user_test
)
如何过滤出包含数字的字符串
若需找出数组中包含至少一个数字的元素,可使用包含数字字符类的正则表达式 /[0-9]/ 或简写形式 /\d/。将此模式传入 preg_grep(),函数会检查每个元素是否含有数字,并返回匹配的子集。这对于清理或验证混合了文本与数据的列表非常有用。

$data = ['abc', 'a1b', '123', 'no_digits', 'x9y'];
$filtered = preg_grep('/\d/', $data);
print_r($filtered);
预期输出:
Array
(
[1] => a1b
[2] => 123
[4] => x9y
)
当数组元素为 null 或非字符串类型时 preg_grep 的行为是什么
在 PHP 7.4 及更早版本中,如果数组中包含非字符串类型(如 null、整数或布尔值),preg_grep() 可能会触发警告或行为不一致。从 PHP 8.0 开始,preg_grep() 会对非字符串元素发出 E_WARNING 警告,并将它们视为不匹配(除非模式能匹配空字符串等特殊情况,但通常非字符串会被跳过或报错)。为了安全起见,建议在过滤前确保数组元素均为字符串,或使用 array_filter() 配合自定义回调函数来处理混合类型,以避免运行时警告。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











