Заранее извиняюсь, если я неправильно понимаю использование Regex в этом контексте.
Я хотел бы получить повторяющееся поле из строки. Рассматриваемая строка выглядит примерно так:
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'},
Из этой строки я хотел бы получить поле «имя» и добавить его в список. Эта строка представляет самые популярные темы в Твиттере и может изменяться каждый раз, когда вызывается метод, создавший ее.
Идеальным выводом было бы что-то вроде -
#Самая большая ложь
#ЯМожноГоворитьЧестно
#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));
}
}
К сожалению, это возвращает исключение Illegal Repetition, и я не уверен, как обрабатывать несколько запросов одного и того же поля. Любая помощь в этом вопросе будет оценена по достоинству.
Спасибо за ваше время!
"{name='(.*),"
используйте"{name='(.*?)'"
, чтобы совпадение заканчивалось на первом апострофе после имени. - person Philippe A   schedule 08.03.2013