我有一个这样的字符串:
$text = 'IvanFedorGalinaRomaIvanGalina';
如何删除该字符串中出现多于ocne但没有分隔符的所有单词?
我试过了:
$array = explode ("", $ text);
$result = array_unique ($array);
$text = implode ("", $ result);
echo $text;
echo "<br>";
结果输出:
Ivan
Fedor
Galina
Roma
Ivan
Galina
答案 0 :(得分:4)
这应该适合你:
使用preg_split()
将字符串拆分为大写字母。所以你最终会得到一个像这样的数组:
Array
(
[0] => Ivan
[1] => Feduor
[2] => Galina
[3] => Roma
[4] => Ivan
[5] => Galina
)
之后使用array_count_values()
计算数组中每个单词存在的次数:
Array ( [Ivan] => 2 [Feduor] => 1 [Galina] => 2 [Roma] => 1 )
然后使用array_filter()
过滤此数组,并且只保留出现一次的单词。
最后使用array_keys()
将单词作为数组中的值,然后您可以implode()
为字符串。
代码:
<?php
$text = 'IvanFeduorGalinaRomaIvanGalina';
$arr = preg_split("/(?=[\p{Lu}])/u", $text, -1, PREG_SPLIT_NO_EMPTY);
$unique = array_keys(array_filter(array_count_values($arr), function($v){
return $v == 1;
}));
echo implode("", $unique);
?>
输出:
FeduorRoma
答案 1 :(得分:1)
如果大写分割对你不起作用,另一种方法可能是简单地通过正则表达式递归,直到你没有重复。当然,您需要指定最少的字符数。
<?php
$text = 'IvanFedorGalinaRomaIvanGalina';
$pattern = '/((.{4,}).*)\\2/';
$replacement = '\\1';
$text=preg_replace($pattern, $replacement, $text, 1, $count);
while ($count > 0) {
$text=preg_replace($pattern, $replacement, $text, 1, $count);
}
print $text . "\n";
这将继续尝试替换4个以上字符的“单词”,直到没有更多替换为止。