-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 に答える