Я кодирую поисковую систему. В основном, если определенное слово встречается, мне нужно, чтобы слово сразу после этого слова было захвачено и удалено.
Если слово «йога» встречается, мне нужно удалить слово сразу после него, здесь «маты». Так что я бы получил:
$sentence="I like yoga mats a lot.";
$word="mats";
$result=I like yoga a lot.
Я посмотрел на strpos, но нужно это слово. У меня также есть preg_split для удаления слов по имени, но мне также нужно удалить это конкретное слово по позиции.
$separate = preg_split('/\s+/', $sentence);
Как бы я убрал слово после «йоги», учитывая, что слово после него не всегда коврики. И мне все еще нужны слова, чтобы быть там.
Этот фрагмент кода должен делать то, что вы ищете:
$words = explode(' ', $sentence);
foreach (array_keys($words, 'yoga') as $key) {
unset($words[$key+1]);
}
$sentence = implode(' ', $words);
Код довольно понятен: отделите предложение словами, определите все ключи, которые имеют значение «йога», сбросьте следующее слово и составьте предложение из оставшихся слов.
$sentence = "I like yoga mats a lot.";
$word = "yoga";
echo preg_replace('#(\b' . preg_quote($word) . '\b)\W*\b\w+\b#U', '$1', $sentence);
Но следующим «словом» может быть «а», «то» и так далее. Чтобы пропустить те слова, которые не являются «словами», необходимо создать список и добавить дополнительные манипуляции.
PS: хорошо, объяснение регулярного выражения
# - start of regexp
( - start of capture
\b - boundary of the word
preg_quote($word) - escaped word to find
\b - boundary of the word
) - close capture group
\W* - any non-word characters
\b - boundary of the next word
\w+ - word characters
\b - boundary
# - end of regexp
U - un-greedy modifier
и то, что соответствовало, было заменено содержимым группы захвата $1
<?php
$user_input = "tea";
$sentence="I like tea mats a lot.";
$word_to_remove = $user_input . " ";
$offset = strlen( $word_to_remove );
$start_pos = stripos( $sentence , $word_to_remove );
$end_pos = stripos( $sentence , " ", $start_pos+$offset );
$str_to_replace = trim( substr( $sentence , $start_pos+$offset, ($end_pos-$offset)-$start_pos ) );
$new_sentence = str_replace( $str_to_replace, "", $sentence );
$new_sentence = preg_replace( "/\s+/", " ", $new_sentence);
echo $new_sentence;
?>