怎么删除字符串中相同的内容?

怎么删除字符串中相同的内容?

$html="123.ccc.ddd123.ccc.ddd333.ccc.ddd444.ccc.ddd";
怎么能处理成
$html="123.ccc.ddd333.ccc.ddd444.ccc.ddd";这个样子
为什么不是处理成:
"123.cd4" 这个样子?
我这样才叫没有重复。
按LZ的意思, $HTML每一子项应该是xxx.ccc.ddd ???
嗯,就是3楼那意思
一个笨办法:
1: 将"123.ccc.ddd123.ccc.ddd333.ccc.ddd444.ccc.ddd"拆分成
123.ccc.ddd
123.ccc.ddd
333.ccc.ddd
444.ccc.ddd
到list中.

可用@items = split(/([^\.]*\.ccc\.ddd)/, $html);
再去掉@items中为""的元素实现
不知道有没有一次拆分搞定的????

2: 比较
这个方法我会我主要想知道有没有用个s///一次能搞定的办法
如果有重复的项, 它们一定相邻吗?
不一定
2句的实现.

$html = "123456.ccc.ddd333.ccc.ddd123.ccc.ddd333.ccc.ddd444.ccc.ddd444.ccc.ddd123.ccc.ddd333.ccc.ddd123.ccc.ddd333.ccc.ddd444.ccc.ddd444.ccc.ddd123.ccc.ddd333.ccc.ddd123.ccc.ddd333.ccc.ddd444.ccc.ddd444.ccc.ddd123.ccc.ddd333.ccc.ddd123456.ccc.ddd333.ccc.ddd444.ccc.ddd444.ccc.ddd";

$html =~ s/(?<=\.ddd)(.+\.ccc\.ddd)(?=.*\1)//g;
$html =~ s/(?<=^)(.+\.ccc\.ddd)(?=.*\1)//g;

print "$html\n";  ### 123.ccc.ddd123456.ccc.ddd333.ccc.ddd444.ccc.ddd



正在努力用1句实现.....
搞定, 就是合并了上面的2句:

$html =~ s/((?<=^)|(?<=\.ddd))(.+\.ccc\.ddd)(?=.*\2)//g;

你是在学习正则表达式还是要解决问题?如果是学习正则表达式可以理解。
如果是解决问题的话,为什么一定要用一句实现?多写几行不是更清晰么