0

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

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

TrendsJSONImpl{asOf=2013 年 3 月 8 日星期五 00:04:26 GMT,trendAt=2013 年 3 月 8 日星期五 00:04:26 GMT,>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', 查询='%23CitePessoasExclusivamenteSuas'},

从这个字符串中,我想检索字段“名称”并将其添加到列表中。此字符串代表 Twitter 上的热门话题,每次调用生成它的方法时都会发生变化。

理想的输出是这样的 -

#最大的谎言

#ICan诚实地说

#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));
                }
            }

不幸的是,这返回了一个非法重复异常,我不确定如何处理同一字段的多个查询。在这件事上的任何帮助将不胜感激。

谢谢你的时间!

4

2 回答 2

0

{是正则表达式的重复运算符,因此您需要像这样对其进行转义:\\{.

于 2013-03-08T00:34:46.710 回答
0

你得到例外的原因是你的正则{表达式中有这个字符。它是一个保留字符,因此必须转义 ( \\{)。

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

于 2013-03-08T00:34:47.880 回答