2013-04-11 121 views
-1

我在每个单词之间使用了|,我试图用preg_match来检测它是否包含目标单词。使用preg_match检查单词

我已经使用这个:

<?php 

$c_words = 'od|lom|pod|dyk'; 
$my_word = 'od'; // only od not pod or other word 


if (preg_match('/$my_word/', $c_words)) 
{ 
echo 'ok'; 
} 

?> 

但它不能正常工作。

请帮忙。

回答

1

不需要正则表达式。功能explode($delimiter, $str);in_array($needle, $haystack);将为您做所有事情。

// splits words into an array 
$array = explode('|', $c_words); 

// check if "$my_word" exists in the array. 
if(in_array($my_word, $array)) { 
    // YEP 
} else { 
    // NOPE 
} 

除此之外,正则表达式将匹配包含相同的序列太等字样。

preg_match('/my/', 'myword|anotherword'); // true 
preg_match('/another/', 'myword|anotherword'); // true 

这正是您在这种情况下不应该使用正则表达式的原因。

+0

非常感谢:) – user2203703 2013-04-11 12:49:42

+0

@ user2203703没问题! – 2013-04-11 12:51:25

1

你不能一个变量传递到单引号的字符串,你需要为使用

preg_match("/$my_word/", $c_words); 

还是 - 我发现吸尘器:

preg_match('/' .$my_word. '/', $c_words); 

但对于这样简单的事情因为我甚至不知道我是否使用正则表达式,所以一个简单的if (strpos($c_words, $my_word) !== 0)就足够了。

+0

'strpos('od','lom | pod')'会匹配,所以这不是一个选项。你的正则表达式也一样。 – 2013-04-11 12:29:02

+0

另一方面,我们不知道$ c_words是什么?这是否意味着'$ all_words'? – 2013-04-11 12:30:52

+0

他可能是指'$ my_word'而不是 – 2013-04-11 12:33:05

0

您正在使用preg_match()错误的方法。由于您使用|作为分隔符,你可以试试这个:

if (preg_match('/'.$all_words.'/', $my_word, $c_words)) 
{ 
    echo 'ok'; 
} 

阅读documentation for preg_match()