在PHP数组中搜索部分字符串?搜索值包含主题标签

Fea*_*nne 7 php regex arrays

例:

$array = array('alpha beta','beta gamma','delta phi', '#alpha phi', 'beta phi');
$searchword = 'alpha';
$results = array_filter($array, function($var) use ($searchword) { return preg_match("/\b$searchword\b/i", $var); });
print_r($results);

Array ( [0] => alpha beta [3] => #alpha phi )
Run Code Online (Sandbox Code Playgroud)

我想只找到包含的元素#alpha,而不是alpha.

我想要的结果是Array ( [3] => #alpha phi ).

但是,这不起作用:

$array = array('alpha beta','beta gamma','delta phi', '#alpha phi', 'beta phi');
$searchword = '#alpha';
$results = array_filter($array, function($var) use ($searchword) { return preg_match("/\b$searchword\b/i", $var); });
print_r($results);

Array ( )
Run Code Online (Sandbox Code Playgroud)

我也试过,$searchword = preg_quote('#alpha');但这也不起作用.我不熟悉正则表达式来解决这个问题 - 必须有一些我错过的正则规则吗?

注意:我不希望在数组中找到所有hashtag关键字.我想搜索特定的hashtag关键字.

信用:我使用了这里的答案之一: 搜索包含字符串的PHP数组元素

Avi*_*Raj 2

去掉起始的\b

preg_match("/$searchword\b/i", $var);
Run Code Online (Sandbox Code Playgroud)

或者

使用\B

preg_match("/\B$searchword\b/i", $var);
Run Code Online (Sandbox Code Playgroud)

为什么?

这都是关于\b单词字符和非单词字符之间的单词边界匹配,反之亦然。由于第一个字符#是非单词字符,并且在该字符之前存在行边界的开头。\B是适合此目的的一个,它在两个非单词字符或两个单词字符之间进行匹配。这里是行的开始,所以中间#一定存在not 。\B\b