2011-09-24 103 views
1

從給定字符串中提取所有「{...}」標記的方便可靠的方法是什麼? (使用Java)。從Java中的字符串文字中提取重複模式集合

所以,舉個例子: 說我有:http://www.something.com/{tag1}/path/{tag2}/else/{tag3}.html

我想所有的「{}」標籤;我在想使用Java .split()函數,但不知道是什麼正確的正則表達式將是這個

還要注意:!標籤可以被稱爲什麼,而不僅僅是Tagx廣告

回答

3

我會用正則表達式這種事情是這樣的搭配可以爲你的表達工作:

String regex = "\\{.*?\\}"; 

因爲這將「不情願地」匹配任何具有{和}圍繞它的子字符串。該.*?使得它找到{和},但不情願,所以它不匹配字符串更大之間的任何字符:

{tag1}/path/{tag2}/else/{tag3} 

這將是一個「貪婪」的比賽。請注意,正則表達式中的花括號需要用雙反斜槓進行轉義,因爲大括號在正則表達式內部具有單獨的含義,並且如果要指示大括號字符串,則需要將其轉義。

例如,

public static void main(String[] args) { 
     String test = "http://www.something.com/{tag1}/path/{tag2}/else/{tag3}.html"; 
     String regex = "\\{.*?\\}"; 

     Pattern pattern = Pattern.compile(regex); 
     Matcher matcher = pattern.matcher(test); 

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

隨着輸出:

{tag1} 
{tag2} 
{tag3} 

你可以閱讀更多有關正則表達式的位置: Oracle Regular Expressions Tutorial

和更詳細的,在這裏: www.regular-expressions.info/tutorial

+0

'「{[^ {}] *}「'可能會更好? (逃跑被忽略) – Kent

+0

@Kent:'「{[^ {}] *}」'對我來說看起來不合法。爲什麼不測試它? –

+0

@Hovercraft謝謝,效果很好! – Larry