Можно регулярки использовать. Я php не знаю, поэтому буду использовать примеры для python, для php должно быть что то похожее.
Для нахождения нужных слов можно использовать префиксные и постфиксные проверки:
(?<=<условие>)<выражение> - <выражение> будет соответствовать шаблону только тогда, когда оно идет после выражения, которое соответствует шаблону <условие>.
(?)<выражение> - аналогично предыдущему, только будет совпадать, если <условие> НЕ будет совпадать.
(?=<условие>)<выражение> - постфиксное условие, <выражение> будет соответстовать, если после него идет выражение, которое соответствует шаблону <условие>
(?!<условие>)<выражение> - постфиксное условие с отрицанием
Для удаления есть метод sub(), на самом деле это замена, но кто нам помешает заменять на пустую строку.
Таким образом можно так:
your_string = '<p>Ох уж этот php хотя java адский ад лучше уж пусть php</p>'
p = re.compile( '(php)(?=.*java)')
p.sub('', your_string)
Для php вроди бы так будет:
$string = "<p>Ох уж этот php хотя java адский ад лучше уж пусть php</p>";
$string = ereg_replace('(php)(?=.*java)', '', $string);
php.net/manual/ru/function.ereg-replace.php