Java 使用正则表达式检索字符串中的重复值

Java 使用正则表达式检索字符串中的重复值,java,regex,twitter4j,Java,Regex,Twitter4j,如果我在这种情况下误解了Regex的用法,请提前道歉 我想从字符串中检索重复字段。所讨论的字符串看起来像这样- TrendsJSONImpl{asOf=Fri Mar 08 00:04:26 GMT 2013,trendAt=Fri Mar 08 00:04:26 GMT 2013,>trends=[TrendsJSONImpl{name=''TheBiggestiles',url='url',query='%23TheBiggestiles',TrendJSONImpl{name='IcanO

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

我想从字符串中检索重复字段。所讨论的字符串看起来像这样-

TrendsJSONImpl{asOf=Fri Mar 08 00:04:26 GMT 2013,trendAt=Fri Mar 08 00:04:26 GMT 2013,>trends=[TrendsJSONImpl{name=''TheBiggestiles',url='url',query='%23TheBiggestiles',TrendJSONImpl{name='IcanOnestlySay',>url='url',query='%23IcanOnestlySay',JstendonImpl{name='EuTenhoUmaQuedaPor',url='url'''''EUTOUNMAQUER23'},>TrendJSONImpl{name='#CitepessoasExclusivesUAS',url='url',query='%23CitepessoasExclusivesUAS'}

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

理想的输出应该是-

#最大的

#我诚实地说

#城市客运专线

在前面的文章之后,我尝试用以下代码提取name字段-

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));
                }
            }
UI.model=newDefaultListModel();
String trendsInfo=//函数whichRetrieveString
Matcher m=Pattern.compile(“{name=”).Matcher(trendsInfo);
模式p=Pattern.compile(
{name='(.*),“,
模式(DOTALL);
匹配器匹配器=p.Matcher(趋势信息);
while(matcher.find()){
对于(int i=0;i<20;i++){
字符串输出=m.group(i);
UI.model.addElement(输出);
系统输出println(m.group(i));
}
}
不幸的是,这返回了一个非法的重复异常,我不知道如何处理同一字段的多个查询。在此问题上的任何帮助都将不胜感激


感谢您的时间!

{
是正则表达式的重复运算符,因此您需要像这样对其进行转义:
\{
您得到异常的原因是您的正则表达式中有字符
{
。它是一个保留字符,因此必须转义(
\{


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

一个额外的提示:不要使用
“{name=”(.*)”,“
使用
“{name=”(.*)”
因此匹配将在名称后的第一个撇号处结束。您好!非常感谢您的快速回复。我采纳了您的建议并更改了代码,不幸的是,我仍然收到一个异常,特别是线程“AWT-EventQueue-0”java.util.regex.PatternSyntaxException:非法重复中的异常{name=有什么想法吗?谢谢!示例代码第三行的另一个regexp也转义了吗?总是当您有一个文本
{
时,您需要将
\{
写成
{
保留供重复使用。您好,mkataja,再次感谢您的帮助!我已经解决了异常问题,但由于某些原因,它没有返回字符串中的所有信息,只返回了5个结果。下面是我最近的代码-string trendsInfo=WorldWideTrendsList.toString();System.out.println(trendsInfo);Pattern p=Pattern.compile(“(#.*?\”),Pattern.DOTALL);Matcher-Matcher=p.Matcher(trendsInfo);while(Matcher.find()){String output=Matcher.group(1);System.out.println(输出);UI.model.addElement(输出);您好,看看您评论中的代码,我真的不知道问题可能是什么。因为这似乎是一个与以前稍有不同的问题,也许您应该将其作为一个新问题发布?您好mkataja!谢谢您的帮助!