2011-09-24 23 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