使用Regex检索String中的重复值

时间:2013-03-08 00:29:19

标签: java regex twitter4j

如果我误解了Regex在这种情况下的使用,请提前道歉。

我想从String中检索重复的字段。有问题的字符串看起来像这样 -

  

TrendsJSONImpl {asOf = Fri Mar 08 00:04:26 GMT 2013,trendAt = Fri Mar 08 00:04:26 GMT 2013,> trends = [TrendJSONImpl {name ='#TheBiggestLies',url ='URL' ,query ='%23TheBiggestLies'},TrendJSONImpl {name ='#ICanHonestlySay',> url ='URL',query ='%23ICanHonestlySay'},> TrendJSONImpl {name ='#EuTenhoUmaQuedaPor',url ='URL' ,query ='%23EuTenhoUmaQuedaPor'},> TrendJSONImpl {name ='#CitePessoasExclusivamenteSuas',url ='URL',query ='%23CitePessoasExclusivamenteSuas'},

从这个字符串中,我想检索字段“name”并将其添加到列表中。此字符串表示Twitter上的趋势主题,并且每次调用生成它的方法时都会更改。

理想的输出类似于 -

#TheBiggestLies

#ICanHonestlySay

#CitePessoasExclusivamenteSuas

按照此前的文章,我尝试使用以下代码提取名称字段 -

UI.model = new DefaultListModel();
            String trendsInfo = //FUNCTIONWHICHRETRIEVESSTRING
                    Matcher m = Pattern.compile("{name=").matcher(trendsInfo);
            Pattern p = Pattern.compile(
                    "{name='(.*),",
                    Pattern.DOTALL);
            Matcher matcher = p.matcher(trendsInfo);


            while (matcher.find()) {
                for (int i = 0; i < 20; i++) {
                    String output = m.group(i);
                    UI.model.addElement(output);
                    System.out.println(m.group(i));
                }
            }

遗憾的是,返回非法重复异常,我不知道如何处理同一字段的多个查询。任何有关此事的帮助将不胜感激。

谢谢你的时间!

2 个答案:

答案 0 :(得分:0)

{是正则表达式的重复运算符,因此您需要将其转义为:\\{

答案 1 :(得分:0)

您获得异常的原因是您的正则表达式中包含字符{。这是一个保留字符,因此必须进行转义(\\{)。

除此之外,您似乎错过了第二个'(在逗号之前)。使用惰性正则表达式也可能是一个好主意,因此最终版本将是这样的:\\{name='(.*?)',。也许您甚至想要添加哈希字符以使其更准确:\\{name='(#.*?)', ...