如果我误解了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));
}
}
遗憾的是,返回非法重复异常,我不知道如何处理同一字段的多个查询。任何有关此事的帮助将不胜感激。
谢谢你的时间!
答案 0 :(得分:0)
{
是正则表达式的重复运算符,因此您需要将其转义为:\\{
。
答案 1 :(得分:0)
您获得异常的原因是您的正则表达式中包含字符{
。这是一个保留字符,因此必须进行转义(\\{
)。
除此之外,您似乎错过了第二个'
(在逗号之前)。使用惰性正则表达式也可能是一个好主意,因此最终版本将是这样的:\\{name='(.*?)',
。也许您甚至想要添加哈希字符以使其更准确:\\{name='(#.*?)',
...