2012-10-15 130 views
1

我剛剛在我們的代碼庫的「Utils」類型類中找到了這個方法。這是很久以前由一位不再爲我們工作的開發人員寫的。它在做什麼?它是什麼回來?!?當然,沒有JavaDocs或評論。這是什麼Java正則表達式代碼在做什麼?

public static String stripChars(String toChar, String ptn){ 
    String stripped = ""; 
    stripped = toChar.replaceAll(ptn, "$1"); 
    return stripped.trim(); 
} 

在此先感謝!

+1

沒有足夠的信息來說出有用的東西。 'ptn'是一個模式,一個正則表達式,並且該字符串中的匹配被'$ 1'代替。 – pb2q

+1

你需要知道什麼,在java文檔replaceAll&trim中沒有解釋什麼? – ilcavero

+0

確定功能的最佳方式是查看它的使用方式。 – Eric

回答

2

似乎在「toChar」裏面的正則表達式「PTN」與匹配,以取代一切在「toChar」中匹配的第一組

正則表達式具有組的概念,例如匹配「年份2012」並將其替換爲「年份1012」或「年份2006」替換爲「年份1007」(更改第一20至10)可以通過替換

來實現

「年20([0-9] [9-9])」 與 「年20 $ 1」 - 即,匹配整個字符串,然後更換它「20年」隨後是第一組($1)。該組是括號中的第一個。

反正你的方法,然後替換匹配「toChar」「PTN」在正則表達式「PTN」第一組的一切。因此,考慮 stripChars(「2012年」,「20年([0-9] [9-9]」);你會收回只有「12」,因爲整個文本將匹配並且僅由第一組所取代。

然後它跳過任何前導或尾隨的空白。

+0

謝謝@Ben(+1) - 所以如果我通過它'字符串s = RegexUtils.stripChars(「年2012」,「20年([0-9] [9-9])」);',那麼會怎麼樣是嗎?再次感謝! – IAmYourFaja

+1

似乎s會是「12」,因爲它會匹配整個字符串,並將其全部替換爲第一組(即12) – Ben

+0

再次感謝@Ben,這很有道理(+1)!我要重命名/重構此方法。你願意給它一個新的(更好,更精確)的名字嗎?我們很榮幸:-) – IAmYourFaja

1

這只是replacing與其匹配的字符的自己subset,然後微調從兩端的空格的字符串。

佛例如

所以,如果你想通過一系列的字

使用正則表達式\b.*?(\d*).*?\b

,然後熱潮的數字來代替一個字,你replaceAll方法會給這些結果

hey123wow->123 
what666->666 
how888->888 

$0指噸他整個在這個例子中

$1指group.i.e匹配的字符串即hey123wowwhat666how888(\d*)在該示例中即123666888

$2將提及它不在這個例子中存在的第二組。

3

這是一個非常簡短的別名,實際上。這:

stripChars(a, b) 

等同於:

a.replaceAll(b, "$1").trim() 
+0

謝謝@Eric(+1) - 我被「$ 1」拋棄 - 這意味着什麼?你能提供一個如何使用它的例子嗎?再次感謝! – IAmYourFaja

1

被作爲參數傳遞到方法的模式字符串似乎包含一個匹配組和呼叫全部更換將要更換整個比賽進行到與第一組相匹配的部分。你應該看看這種方法找到一些正則表達式傳遞到與正在根據工作的弦沿方法的調用層次,

+0

謝謝@Vikdor(+1) - 請在Eric的回答下看到我的問題 - 我對你有同樣的問題! – IAmYourFaja

+0

您可以使用此語法對您的正則表達式的部分進行分組,以引用與此部分匹配的內容。下面的Rohit的答案有詳細解釋的鏈接。 – Vikdor

0
toChar.replaceAll(ptn, "$1"); 

它與拍攝組$1我們不知道它是更換的ptn所有OCCURENCES在toChar

捕獲基團是內部brackets()型態: -

對於EG在正則表達式如下: -

"(\\d+)(cd)"

  • $0表示完全匹配
  • $1表示所述第一捕獲組( \\d+
  • $2表示第二擷取組(cd

    String str1 = "xyz12cd"; 
    
    // This will replace `12cd` with the first capture group `12` 
    str1 = str1.replaceAll("(\\d+)(cd)", "$1"); 
    System.out.println(str1); 
    

學習更多有關Regular Expression,你可以參考以下鏈接: -