5

特定の検索文字列の「コンテキスト」を取得したい。たとえばmyself、次の行の検索文字列の場合

私と犬と私は休暇に出かけます。

dog and myself are goingN=2を取得したい。つまり、試合前に 2 単語、試合後に 2 単語。


現在、次のように行全体を一致させます。

$lines = file($file->getFilename());
$lines = preg_grep('/'.$_POST['query'].'/', $lines);
4

1 に答える 1

9

preg_grep()はそのように動作するはずですが、preg_match()が必要なように思えます。また、テキスト内に検索された単語の複数のインスタンスがあり、それらすべてを検索したい場合に備えてpreg_match_all()

あなたが探している正規表現は次のとおりです:(?:[^ ]+ ){0,2}myself(?: [^ ]+){0,2} ここで説明されたデモ: http://regex101.com/r/pB3eW0

それ以外の場合は 1 語またはまったく 一致しない場合は、前後の 2 語に一致するように設計しました。

変数Nを許可するコードは次のようになります。

$fileData=file_get_contents($file->getFilename());
$n=2;
$query='myself';
preg_match_all('/(?:[^ ]+ ){0,'.$n.'}'.$query.'(?: [^ ]+){0,'.$n.'}/i',$fileData,$matches);
print_r($matches);

ユーザー入力を検証してエスケープすることを忘れないでください。与えられた関数で使用するだけではありません。

于 2013-03-23T11:06:47.950 に答える