如何删除字符串中特定单词后的两个单词?例如,我的句子以句号结尾:
$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不要删除。
答案 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.
答案 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,}
- 至少五个字符