2017-01-30 63 views
0

我想使用preg_match在我的数组中搜索部分字符串。我已经有足够的工作,但我的数组中的一些字符串中有破折号( - ),结果不会像他们应该回来的那样。我不太熟悉正则表达式知道为什么。使用破折号搜索字符串内部的子字符串

这里是我的preg_match:

if(preg_match("/\b$game\b/i", $value['name'])) 
{ 
    var_dump($value['name']); 
} 

如果我搜索“我的狗”,它会给我所有的文字“我”和“狗”的结果。但是任何有“我的狗”的结果,它都不会返回它们。如果我输入“mydog”,是否可以显示结果?

谢谢。

+1

显示输入'$ value ['name']'值和'$ game'值i。即输入和预期输出 – RomanPerekhrest

+0

我已经给出了两个,也许我不够清楚,我的坏! $ value ['name']是一个游戏的名称,例如:Counter-Strike。 使用$游戏,如果我在输入字段中键入Counter-Strike,它会正确返回。但是如果我输入,反击或反击,它什么都不会返回,我认为这是因为我的模式? – Cloud

+0

如果您不需要单词边界,请删除'\ b'。 –

回答

0

我会添加一个函数在检查匹配之前标准化测试字符串和正则表达式字符串。

function standardize($word){ 
    $word = strtolower($word); 
    $word = str_replace("-", "", $word); 
    $word = str_replace(" ", "", $word); 
    return $word; 
} 

$game = standardize($game); 

if(preg_match("/\b$game\b/i", standardize($value['name']))) 
{ 
    var_dump($value['name']); 
} 
0

那这正则表达式:

/my[- ]{0,1}dog/i 

这将搜索“我的”,那么 - 或空白区,零次或一次,然后狗。最后我意味着不区分大小写的匹配。