示例:
$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 )
我想仅找到包含#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 ( )
我也试过$searchword = preg_quote('#alpha');
,但这也不起作用。我不熟悉正则表达式来解决这个问题 - 必须有一些我错过的正则规则吗?
注意:我不希望在数组中找到所有hashtag关键字。我想搜索特定的hashtag关键字。
信用:我使用了以下答案之一: Search for PHP array element containing string
答案 0 :(得分:2)
删除起始\b
preg_match("/$searchword\b/i", $var);
或强>
使用\B
preg_match("/\B$searchword\b/i", $var);
为什么?
所有关于单词边界\b
匹配单词char和非单词char之间,反之亦然。由于第一个字符是#
,它是一个非单词字符,在该字符之前存在行边界的起点。 \B
是适合的,它在两个非单词字符或两个单词字符之间匹配。这一行的开头为#
,因此必须存在\B
而不是\b
。
答案 1 :(得分:2)
删除第一个\b
word boundary并使用$searchword = '#alpha';
要搜索数组并获取与该模式匹配的条目,请使用preg_grep function:
print_r(preg_grep("/".preg_quote($searchword, "/")."\b/i", $array));
阵 ( [3] => #alpha phi )
答案 2 :(得分:2)
或者您也可以使用strpos
代替preg_match
作为
$searchword = '#alpha';
$results = array_filter($array, function($var) use ($searchword) { return (strpos($var,$searchword)>-1); });
答案 3 :(得分:1)
更改您的代码
$searchword = 'alpha';
到
$searchword = '^#alpha';
以^
#
主题标签
preg_match('/^#alpha/', '#alphasomething');
将匹配#alpha
https://regex101.com/r/rU1eA9/1
与alpha
https://regex101.com/r/rU1eA9/2
因为这是相互渗透的开放性
我想只找到包含#alpha
的元素
某些答案可能会匹配“#alpha
b#alphagama
的某些内容,例如gamma #alpha
或某些情况^
等。
我虽然提到我的RegX手段中的领先#
胡萝卜。因此,为了使我的答案匹配,字符串必须以alpha
标签开头,后跟#alpha
字面意思。
因此,如果您只想要gama#alpha
这样的“包含”#alpha
,那么我的答案可能不是最好的。但如果您想以^
开头,我建议您使用它。
我觉得重要的是要确保我高亮地点亮了这些边缘情况,以及我的领导<div class="outerBoxContent">
<div class="fancybox" id="nav" href="#inline1"/>
<img src="billing.svg" id="my_image" class="gold1"/>// this is my image over this I need to place the div content
</div>
的确切含义。