У меня есть текст, возвращенный из поискового запроса, и назовем его $ body. Теперь я хочу, чтобы скрипт нашел первое вхождение поискового запроса, $ query. Я знаю, что я могу найти это первое вхождение в этом случае с strripos.
После того, как я нашел, я хочу, чтобы сценарий возвращал пару слов до первого появления строки, а также несколько слов после окончания первого вхождения.
По сути, я пытаюсь сделать то, что Google делает с результатами поиска.
Любые идеи о том, где я должен начать? Моя проблема в том, что я продолжаю возвращать частичные слова.
Ты мог:
$words = explode(" ", $body);
Создание массива всех слов в $ body.
$index = array_search($query, $words); $string = $words[$index - 1]." ".$words[$index]." ".$words[$index + 1];
Но у вас возникнут проблемы, если запрос состоит из более чем одного слова.
explode – array_search
Мне кажется, что вы можете использовать strpos
чтобы найти начало поискового термина и strlen
чтобы получить его длину, что позволило бы вам …
strpos
+ strlen
и покажите первое слово в этом массиве. Или, если у вас уже есть несколько символов до и после поискового запроса, если вы взорвите их в массив, вы можете вытащить одно или два слова.
Я не знаю PHP, но если вы можете использовать регулярные выражения, вы можете использовать следующий:
string query = "search"; int numberOfWords = 2; Regex( "([^ \t]+\s+){" + numberOfWords + "}\w*" + query + "\w*(\s+[^ \t]+){" + numberOfWords + "}" );
как насчет нескольких слов с обеих сторон:
<?php $subject= "Four score and seven years ago, our forefathers brought forth upon this continent a new nation"; $pattern= "/(\w+\s){3}forth(\s\w+){3}/"; preg_match($pattern, $subject, $matches); echo("... $matches[0] ...");
дает:
... our forefathers brought forth upon this continent ...