2012-11-27 20 views
0

我一直在试图将我的一个变量与另一个变量相匹配。所有我想要的变量让我们说$word包含它与其他变量相匹配,让说$search_in和回声结果相应。Preg_match无论如何

我一直在使用if (preg_match("/$word/i", $search_in)) echo "matches";,但是我收到很多类似以下的警告,因为我对从数据库返回的值应用了正则表达式。

警告:的preg_match()[function.preg匹配]:未知的修饰 '('

警告:的preg_match()[function.preg匹配]:未知的修饰 'T'

+0

您不能只在$ word中插入正则表达式,因为如果$ word包含特殊字符,它将被视为正则表达式的一部分,这些特殊字符在那里有特殊含义。他们需要逃脱。你应该确保这些http://us3.php.net/manual/en/regexp.reference.meta.php作为一个开始逃脱。 –

回答

2

$word最有可能包含斜线。

你应该使用stripos对于这一点,因为你不需要正则表达式的所有力量:

if (stripos($search_in, $word) !== false) echo 'matches'; 

为了记录在案,这样做的preg_match方式将是:

if (preg_match('/'.preg_quote($word, '/').'/i', $search_in)) echo 'matches'; 

当前者可以完成这项工作时,始终将字符串函数用于正则表达式。

+0

感谢这两种方法... –

3

如果你只是需要检查$word是否存在$search_in,你可以使用:

if(stripos($search_in, $word) !== FALSE) echo "matches"; 

正如PHP manual说:

如果您只想检查一个字符串是否包含在另一个字符串中,请勿使用preg_match()。使用strpos()或strstr()来代替,因为它们会更快。

+0

或'stripos'因为正则表达式搜索不区分大小写。 –

+0

'strpos'(或'stripos')*从不*返回'true'。 – netcoder

+0

我想要一个像“iphone”=“iphone5”的比赛,意味着如果有iphone,所以回声“匹配” –