删除特定单词后的两个单词

时间:2013-12-16 20:29:48

标签: php regex

如何删除字符串中特定单词后的两个单词?例如,我的句子以句号结尾:

$sentence = 'hello stackoverflow remove string bla bla bla.';
$specificword = 'stackoverflow';

我想删除'remove'和'string',并输出:

$output = 'hello stackoverflow bla bla bla.';

如果可能的话,另一个更好的选择是:如果word1的strlen和word2> 5,如果word1> 5的strlen和{{1},则删除特定单词后面的两个单词word2< 5不要删除。

2 个答案:

答案 0 :(得分:1)

要简单地删除这两个字,您可以使用str_replace()

$new_sentence = str_replace(array('remove', 'string'), '', $sentence);

如果要检查指定字符串后面两个单词的长度,则需要先提取单词。您可以使用substr()strpos()获取指定单词后面的句子部分,然后使用explode()将空格分隔为空格作为分隔符:

$specific_word_pos = strpos($sentence, $specificword) + strlen($specificword);
$sentence_part = substr($sentence, $specific_word_pos);
$words = explode(' ', trim($sentence_part));

// check the word lengths and do the removal    
if (strlen($words[0]) > 5 && strlen($words[1]) > 5 ) {
    $new_sentence = str_replace(array('remove', 'string'), '', $sentence);
} else {
    // some code
}

echo $new_sentence; // => hello stackoverflow  bla bla bla.

Demo.

答案 1 :(得分:0)

您可以使用具有正向lookbehind的正则表达式来执行此操作。

$s = 'hello stackoverflow remove string bla bla bla.';

$output = preg_replace('/(?<=stackoverflow)(\s+)\w{5,}\s+\w{5,}\s+/ui', '$1', $s);

echo $output, PHP_EOL; // hello stackoverflow bla bla bla.

(?<=stackoverflow)告诉模式它必须以“stackoverflow”开头,用你的$specifiedword替换它。我们使用正面的背后说,“stackoverflow后跟两个字,至少五个字符长,用空格分隔”

  • (?<=stackoverflow) - 匹配指定字词的正面观察
  • \s+ - 一个或多个空格字符
  • \w{5,} - 至少五个字符