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

时间:2015-07-24 05:05:42

标签: php arrays regex

示例:

$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

4 个答案:

答案 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   )

Test at eval.in

答案 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> 的确切含义。