例:
$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数组元素
去掉起始的\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
归档时间: |
|
查看次数: |
388 次 |
最近记录: |