我在每个单词之间都有一些单词,|
我试图用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';
}
?>
但它不能正常工作。
请帮忙。
我在每个单词之间都有一些单词,|
我试图用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';
}
?>
但它不能正常工作。
请帮忙。
不需要正则表达式。这些功能将为您做一切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
这就是为什么在这种情况下不应该使用正则表达式的原因。
您不能将变量传递给带有单引号的字符串,您需要使用
preg_match("/$my_word/", $c_words);
或者——我发现那个更清洁的:
preg_match('/' .$my_word. '/', $c_words);
但是对于像我什至不知道我是否会使用正则表达式这样简单的事情,一个简单的if (strpos($c_words, $my_word) !== 0)
就足够了。
你用preg_match()
错了方法。由于您使用|
的是分隔符,您可以试试这个:
if (preg_match('/'.$all_words.'/', $my_word, $c_words))
{
echo 'ok';
}
阅读. _preg_match()