0

私はこの小さな仕事を手にしています。次の文字 [ \n\r\t!@#\$%*\^()_.,] のいずれかに囲まれた単語と一致する必要があります。

申し訳ありませんが、これについて明確にさせてください。現時点では、「To」、「 to 」、「$to$」、「#To#」を一致させることができます。ただし、以下のコードで「To_Lee」を検索すると、見つかりません。 "To_Lee" に一致する必要がありますが、"tomato" のように "to" を含む単語は無視されます。

$string = 'This is a random string that contains To_Lee';
preg_match('/\b(_*(to)_*)\b/i', $string, $matches);

これは、To_Lee を除くすべてのケースで true を返します。To_Lee を有効な一致としてキャプチャできるようにするには、何をする必要があるか教えてください。

混乱して申し訳ありませんが、これがもう少し明確になることを願っています。

もう一度ありがとう。

4

1 に答える 1

0

私は自分自身の質問に対する答えを見つけたと思います。私の環境でコードをテストした後、期待どおりの結果が得られました。

アレクセイに自分の言いたいことを説明した後、私は基本的に自分の答えにたどり着きました。

コードは次のとおりです。

$string = 'This is a very long string, that contains Sam. sam is just as bad. Not sure what I need but i think it feels the same. Sam_Alex is the same as Alex_Sam. Alex is the same as well..';

基本的に、括弧内の指定された文字列の前後にある文字以外のものと一致させたいと考えています。上記の文字列で、「sam」に似た「same」という単語を追加したことに気付きました。ただし、この単語は完全に無視されます。この場合、「same」は無視したいと思います。

$pattern = '([^a-zA-Z])(_*(Sam)_*)([^a-zA-Z])';
preg_match($pattern, $string, $matches);

私たちに与えます:

var_dump($mathes);
array(1 => "Sam.",2 => " sam", 3 => "Sam_", 4 => "_Sam");

みんなの助けに感謝します。それは有り難いです。

于 2012-09-06T16:49:32.317 に答える