过滤数组以使用词边界保留包含搜索词的值
Filter array to keep values containing the search word using word boundaries
我知道以前有人问过这种类型的问题,我也看到了那些可行的答案。但是,当搜索字符串和数组值的其余部分之间没有 space 时,它不起作用。这是我的代码 -
$example = array ( 'ext_03.jpg', 'int_01_headlight.jpg');
$searchword = 'int_';
$matches = array_filter($example, function($var) use ($searchword) {
return preg_match("/\b$searchword\b/i", $var);
});
echo array_values($matches)[0];`
$example
数组中的最后一个值没有任何 space,此代码无效。但是,如果我将 space 放在 int_
之后,它就会起作用。但是即使没有 spaces 我也需要它工作(当有 space 时也应该工作)。我怎样才能做到这一点?
解决方法如下:
$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);
如果您的逻辑需要,您可以在 _
之后使用字符 class 扩展模式。
但如果您只对第一场比赛感兴趣 ([0]
),那么您不妨 运行 一个 foreach()
与 preg_match()
和一个 break
.
我知道以前有人问过这种类型的问题,我也看到了那些可行的答案。但是,当搜索字符串和数组值的其余部分之间没有 space 时,它不起作用。这是我的代码 -
$example = array ( 'ext_03.jpg', 'int_01_headlight.jpg');
$searchword = 'int_';
$matches = array_filter($example, function($var) use ($searchword) {
return preg_match("/\b$searchword\b/i", $var);
});
echo array_values($matches)[0];`
$example
数组中的最后一个值没有任何 space,此代码无效。但是,如果我将 space 放在 int_
之后,它就会起作用。但是即使没有 spaces 我也需要它工作(当有 space 时也应该工作)。我怎样才能做到这一点?
解决方法如下:
$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);
如果您的逻辑需要,您可以在 _
之后使用字符 class 扩展模式。
但如果您只对第一场比赛感兴趣 ([0]
),那么您不妨 运行 一个 foreach()
与 preg_match()
和一个 break
.