2013-03-19 4 views
3

Я хочу получить «контекст» данной строки поиска. Например, для строки поиска myself в следующей строкеRegExp Получить N слов до и после

Я, моя собака и я отправляемся в отпуск.

Я хочу получить dog and myself are going для N = 2. Итак, 2 слова перед матчем и 2 после.


В настоящее время я сопрягать целые строки, как это:

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

Насколько сложным может быть содержимое файла и строка поиска? – Passerby

+0

Как вы определяете слово? Только английский алфавит или другие языки? Вы разрешаете цифру? Как насчет пунктуации? Или вы скорее определяете его как не-пространственную последовательность? – nhahtdh

+0

Предположим, что содержимое файла составлено из «слов» - строк, разделенных пробелами. –

ответ

5

preg_grep() должен действовать так, но это звучит, как вам нужно будет preg_match() и в случае, если вы можете иметь несколько экземпляров искомым словом в текст и хочет, чтобы найти их все preg_match_all()

регулярного выражения вы ищете это: (?:[^ ]+){0,2}myself(?: [^ ]+){0,2} Разъяснение демо здесь: http://regex101.com/r/pB3eW0

Я разработал его, чтобы он соответствовал 2 словам до и после , если он может иначе 1 слово или даже нет.

код позволяет переменной 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); 

Не забудьте проверить и избежать пользовательского ввода, а не просто использовать его в функциях, как указано!

+0

Идеальное, хорошее объяснение со связанными ресурсами тоже. +1! –

+0

Спасибо за ответ и за введение в regex101.com его довольно круто. – codisfy

Смежные вопросы