2017-01-23 101 views
-2

我正在處理從字符串中刪除重複單詞的問題。例如,java正則表達式刪除重複的單詞

輸入:Goodbye bye bye world world world

輸出:Goodbye bye world

我已得到在線資源工作模式,但我不能夠理解它的所有內容。

String pattern = "\\b(\\w+)(\\b\\W+\\b\\1\\b)*"; 

這是我的理解:

  1. 初始\\b是匹配字bounaries
  2. (\\w+)匹配一個或多個字符
  3. 在此表達
  4. (\\b\\W+\\b\\1\\b)*

    一個。 \\b匹配單詞邊界

    b。 \\W+匹配一個或多個非單詞字符

    c。 \\b再次匹配一個字bounary

    d。 \\1 ???我不知道這是什麼,但它不會沒有這個工作

    c。 \\b再次bounary

一個詞的匹配,而你可以看到,我主要的困惑是關於項目3,特別是\\1。 任何人都可以更清楚地解釋它?

+0

嗨。我總是使用regexr來測試和嘗試正則表達式[點擊這裏](http://regexr.com/),如果你把指針放在它顯示消息的表達式上,它就解釋發生了什麼 –

+0

@GabrielMarques,謝謝你的鏈接。然而,我的模式或anubhava編寫的模式都不適用於這個網頁編輯器。語法與java正則表達式相同嗎? – drdot

+0

是的,嘗試刪除雙反斜槓字符'\',它會起作用。您使用雙反斜槓導致您將字符串寫入表達式,並將其加倍以避免 –

回答

2

使用Java,您可以使用一個超前刪除所有具有相同的字相匹配的話提前使用反向引用:

final String regex = "\\b(\\w+)\\b\\s*(?=.*\\b\\1\\b)"; 
final String input = "Goodbye bye bye world world world\n"; 

final String result = input.replaceAll(regex, ""); 

它使用單詞邊界這裏避免匹配部分單詞是很重要的。

RegEx Demo

相關問題