-1

我在每个单词之间都有一些单词,|我试图用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';
}

?>

但它不能正常工作。

请帮忙。

4

3 回答 3

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

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

于 2013-04-11T12:27:11.327 回答
1

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

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

或者——我发现那个更清洁的:

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

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

于 2013-04-11T12:27:28.743 回答
0

你用preg_match()错了方法。由于您使用|的是分隔符,您可以试试这个:

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

阅读. _preg_match()

于 2013-04-11T12:29:48.870 回答