筛选数组以使用单词边界保留包含搜索单词的值



我知道以前有人问过这种类型的问题,我也看到了这些有效的答案。但是,当搜索字符串和数组值的其余部分之间没有空格时,它就不起作用了。这是我的代码-

$example = array ( 'ext_03.jpg', 'int_01_headlight.jpg');
$searchword = 'int_';
$matches = array_filter($example, function($var) use ($searchword) {
return preg_match("/b$searchwordb/i", $var);
});
echo array_values($matches)[0];`

$example数组中的最后一个值没有任何空间,因此此代码不起作用。但是,如果我在int_后面放空格,它就可以了。但我需要它来工作,即使没有空间(也应该在有空间的时候工作(。我怎样才能做到这一点?

以下是解决方案:

$example = array ( 'ext_03.jpg', 'int_01_headlight.jpg');
$searchword = 'int_';
$matches = array_filter($example, function($var) use ($searchword) { return 
preg_match("/b$searchword/i", $var); });
var_dump($matches);

删除第二个\b:模式中的\b表示单词边界

文件:http://php.net/manual/en/function.preg-match.php

编辑:

更好的方法是使用\A:字符串的开头

$example = array ( 'ext_03.jpg', 'int_01_headlight.jpg', 'ext_ int_01_headlight.jpg');
$searchword = 'int_';
// Return 2 results (wrong way)
$matches = array_filter($example, function($var) use ($searchword) { return preg_match("/b$searchword/i", $var); });
var_dump($matches);
// Return 1 result
$matches = array_filter($example, function($var) use ($searchword) { return preg_match("/A$searchword/i", $var); });
var_dump($matches);

当您希望使用正则表达式来筛选数组时,在array_filter()中调用preg_match()是次优选择。

最合适的调用是preg_grep()

试试这样的东西:

$example = preg_grep('~bint_~', $example);

如果您的逻辑需要,您可以在_之后使用字符类来扩展模式。

但是,如果您只对第一个匹配([0](感兴趣,那么您还可以运行带有preg_match()breakforeach()

最新更新