从Java中的String literal中提取重复模式集

时间:2011-09-24 15:06:03

标签: java regex

从给定字符串中提取所有“{...}”标记的方便可靠方法是什么? (使用Java)。

那么,举一个例子: 我说:http://www.something.com/{tag1}/path/{tag2}/else/{tag3}.html

我想得到所有“{}”标签;我正在考虑使用Java .split()函数,但不确定正确的正则表达式是什么。

另请注意:标签可以被调用,而不仅仅是tagX!

1 个答案:

答案 0 :(得分:3)

我会使用正则表达式来匹配它。这样的事情可能对你的表达有用:

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

因为这将“不情愿地”匹配任何围绕它的{和}的子字符串。 .*?使它找到{和}之间的任何字符,但很不情愿,因此它与较大的字符串不匹配:

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

这将是一场“贪婪”的比赛。请注意,正则表达式中的花括号需要使用双反斜杠进行转义,因为花括号在正则表达式中具有单独的含义,如果要指示花括号String,则需要将其转义。

如,

   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