php - 返回与 preg_match 的匹配项,不带数字键的项目

标签 php arrays regex match preg-match

$str = 'foobar: 2008';

preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);

print_r($matches);

Array
(
    [0] => foobar: 2008
    [name] => foobar
    [1] => foobar
    [digit] => 2008
    [2] => 2008
)

我希望 $matches 仅包含“名称”和“数字”值,而不通过迭代删除其他值。

有没有更快的方法? preg_match 默认情况下只能返回字符串类型的键吗?

注意:上面的 preg_match 是一个例子。我想要任何输入的解决方案。

最佳答案

没有像 preg_match 这样的“简单”方法没有这样的选项来仅输出命名组。

如果您必须从数组中删除带有数字键的项目并且不想使用显式循环,您可以使用此 array_filter 解决方法:

$str = 'foobar: 2008';
if (preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches)) {
    print_r(
      array_filter($matches, function ($key) { return !is_int($key); }, ARRAY_FILTER_USE_KEY)
    );
} // => Array ( [name] => foobar [digit] => 2008 )

请参阅PHP demo

关于php - 返回与 preg_match 的匹配项,不带数字键的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54669536/

相关文章:

php - 查询MySQL上的多个表

php - 当我将 div 悬停在另一个 div 中时,javascript 触发 "onmouseover"和 "onmouseout"

php - 如何在 php 中显示表架构查询中的数组

java - 如何在 Java 中将 int[] 转换为 Integer[]?

c++ - 不能对 void 指针使用指针运算,那么 void 指针数组是如何工作的呢?

php - 将数据库从 wamp 添加到 xampp

java - String.split 是如何工作的?

java - 将 var^power 替换为 pow(var,power)

从A点到B点的mysql正则表达式

ruby 。 "Magic method"表示哈希数组