2

ユーザーがコンマ区切りのキーワードまたはキー フレーズを入力するテキスト フィールドがあり、サーバーはこれらの値を使用して複数のテキスト本文の一致をチェックします。

したがって、基本的に必要なのは、大文字と小文字を区別しない正確なフレーズを、テキスト本文内の可能なスペースと一致させることです。

次の正規表現を生成することで、キーワードを簡単に照合できます。

キーワードの例:peanut, butter, jelly

生成された正規表現:/peanut|butter|jelly/i

ただし、スペースを持つことは機能しません。指定された値のスペースを次のように置き換えても\s

peanut butter, jelly sandwich, delicious

正規表現:/peanut\sbutter|jelly\ssandwich|delicious/i

フレーズに正確に一致する正しい正規表現は何でしょうか? 大文字と小文字を区別せず、PHP の preg_match?

ありがとう。

編集

これは私がやっていることです:

$keywordsArray = array_map( 'trim', explode( ',', $keywords ) );
$keywordsArrayEscaped = array_map( 'preg_quote', $keywordsArray );
$keywordsRegex = '/' . implode( '|', $keywordsArrayEscaped ) . '/i';

上記は、上記の式を生成します (動作しなかったため、スペースを に置き換え\sていません。)

それに続いて、私は簡単に行いますpreg_match( $keywordsRegex, $text );

4

2 に答える 2

3

スペースや\sでは機能しない理由がわかりません。そうすべき。しかし、一般的な用語で尋ねた質問に答えるには、正規表現で正確なフレーズを一致させる方法は、それらを\Qおよび\Eで囲むことです。

/\Q<phrase 1>\E|\Q<phrase 2>\E|\Q<phrase 3>\E/

これは通常、エスケープまたは正規表現のメタ文字を含むテキストに使用されます。スペースには本当に必要ありません。

于 2013-07-23T16:31:33.750 に答える