2012-10-17 64 views
2

我想捕獲一部分字符串,我知道它涉及子字符串,正則表達式和匹配的一些組合,我很難將一個體面的解決方案放在一起。比方說,我有一段文字:捕獲字符串的一部分

String str = "Lorem ipsum dolor [cookie:firstname] adipiscing elit."; 

我想捕捉文本在中間的的:與上面,「名字」,在這種情況下(cookie的名稱可能是可變長度)。一種方法我想是採用分體式:

str = str.split("\\cookie:")[1]"); 

那麼也許一個str.replace刪除訓練「]」 - 但我希望有這樣做的更優雅的方式。我對正則表達式很陌生,但沒有成功獲得我需要的東西。

在此先感謝您的幫助。

回答

1

你可以試試下面的正則表達式代碼: -

String str = "Lorem ipsum dolor [cookie:firstname] adipiscing elit."; 
    Pattern pattern = Pattern.compile(".*?\\[.*?:(.*?)\\].*"); 
    Matcher matcher = pattern.matcher(str); 

    if (matcher.find()){ 
     System.out.println(matcher.group(1)); 
    } 

輸出: -

firstname 
+0

謝謝,那很好。 – user1754738

2

這是一個班輪:

String part = str.replaceAll(".*:(.*)].*", "$1"); 

正則表達式捕獲整個輸入,其被替換爲第一組,捕捉你想要的部分,有效地返回你想要的部分。

下面是一些測試代碼:

public static void main(String[] args) { 
    String str = "Lorem ipsum dolor [cookie:firstname] adipiscing elit."; 
    String part = str.replaceAll(".*:(.*)].*", "$1"); 
    System.out.println(part); 
} 

輸出:

firstname 
+0

您可能希望在該模式中添加前導'\\ [',以便它只抓取括號內的子字符串。 –

+0

這工作,但由於某種原因,它導致組成的文本重新加載。謝謝,在我將來的練習中會很有用 – user1754738