用preg_match检查单词

时间:2013-04-11 12:25:02

标签: php 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';
}

?>

但它无法正常工作。

请帮忙。

3 个答案:

答案 0 :(得分: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

这就是为什么在这种情况下你不应该使用正则表达式。

答案 1 :(得分:1)

您不能将变量传递给带单引号的字符串,您需要使用

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

或者 - 我觉得更干净:

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

但对于一些简单到我甚至不知道我是否使用正则表达式的东西,一个简单的if (strpos($c_words, $my_word) !== 0)就足够了。

答案 2 :(得分:0)

您正在以错误的方式使用preg_match()。由于您使用|作为分隔符,因此可以尝试:

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

阅读documentation for preg_match()