将所有重复出现的字符串替换为单个字符串

时间:2018-05-15 14:13:16

标签: php regex replace

如何将所有重复出现的字符串替换为单个字符串:

我的字符串如下:

1-string-2-string-3-string-55-otherstring-66-otherstring

我需要替换:

1-2-3-string-55-66-otherstring

我该怎么做?

2 个答案:

答案 0 :(得分:1)

你可以这样做:

$str = '1-string-2-string-3-string-55-otherstring-66-otherstring';
print_r(implode('-', array_reverse(array_unique(array_reverse(explode('-', $str))))));

Live demo

或使用正则表达式:

(\w++)-?(?=.*\b\1\b)

故障:

  • (\w++)匹配并捕获一个字
  • -?匹配以下连字符(如果有)
  • (?=开始积极前瞻
    • .*\b\1\b最近捕获的字词应该重复
  • )前瞻结束

Live demo

PHP代码:

echo preg_replace('~(\w++)-?(?=.*\b\1\b)~', '', $str);

答案 1 :(得分:0)

你可以使用str_word_count来获取单词和array_count值来计算每个单词在字符串中会面的时间

并在计数大于1时替换每个单词

<?php
$text = "1-string-2-string-3-string-55-otherstring-66-otherstring";

$words = str_word_count($text, 1); 

$frequency = array_count_values($words);

foreach($frequency as $item=>$count) {
$item = rtrim($item,"-");

    if($count >1){
        $text = str_replace($item,"",$text);
    }
}
echo $text;
?>