2011-09-03 72 views
1

附加重複的字符串。例如,我有一個這樣的字符串:正則表達式在PHP

Line 1 
<br/> 
<br/> 
Line 2 
<br/> 
<br/> 
<br/> 
Line 3 

我需要檢測和更換複製和連接字符串,如<br/>的,因此將只有1 <br/>代替。所以,最後的結果我想到的是:

Line 1 
<br/> 
Line 2 
<br/> 
Line 3 

任何人都可以幫助我的正則表達式?解釋將不勝感激。

+0

什麼語言?當你詢問關於SO的正則表達式時,你應該幾乎總是指定你正在使用的語言。 – xanatos

+0

@xanatos:在PHP中,編輯過的問題。謝謝。 – ayublin

回答

2
preg_replace('/(.{3,})\\1+/s', '\\1', $string); 

這將取代的3個字符以上重複的字符串的任何序列。

這裏試試:http://ideone.com/5ew7X

如果你想只更換<br/> S:

preg_replace('/(<br\/>\s*){2,}/s', '\\1', $string); 
+0

謝謝,是否可以指定要清理的某個字符串,例如只有「
」纔會被清除。 – ayublin

+0

是的,我已經更新了答案 – arnaud576875

+0

哎呀,我試過只有一個'
',看起來像它不工作.. – ayublin

1

不是你的正則表達式問題的直接答案,仍然考慮使用sed來做它;禮貌Eric Pement's sed one-liners

# delete duplicate, consecutive lines from a file (emulates "uniq"). 
# First line in a set of duplicate lines is kept, rest are deleted. 
sed '$!N; /^\(.*\)\n\1$/!P; D' 

# delete duplicate, nonconsecutive lines from a file. Beware not to 
# overflow the buffer size of the hold space, or else use GNU sed. 
sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' 

# delete all lines except duplicate lines (emulates "uniq -d"). 
sed '$!N; s/^\(.*\)\n\1$/\1/; t; D' 
+0

對不起,我不提供我將要使用的語言的信息,這可能與PHP一起使用嗎? – ayublin

+0

不,sed是unix命令行工具 –