我在每个单词之间都有|
的单词,我尝试使用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';
}
?>
但它无法正常工作。
请帮忙。
答案 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';
}