正则表达式变得太贪婪(Java/android)
我有一个XML样式的字符串,我正试图在正则表达式变得太贪婪(Java/android),java,android,xml,regex,Java,Android,Xml,Regex,我有一个XML样式的字符串,我正试图在while(matcher.find()){}循环中从中获取一个组。下面是我正在使用的正则表达式: (.*) 转换为在java中使用时: Pattern setPattern = Pattern.compile("<myset setName=\"(.+?)\">(.*?)</myset>"); Matcher matcher = setPattern.matcher(targetString); while(matcher.find
while(matcher.find()){}
循环中从中获取一个组。下面是我正在使用的正则表达式:
(.*)
转换为在java中使用时:
Pattern setPattern = Pattern.compile("<myset setName=\"(.+?)\">(.*?)</myset>");
Matcher matcher = setPattern.matcher(targetString);
while(matcher.find()){
Log.i(TAG, "First group: " + $1 + " Second group: " + $2);
}
Pattern setPattern=Pattern.compile((*?);
Matcher Matcher=setPattern.Matcher(targetString);
while(matcher.find()){
Log.i(标记,“第一组:+$1+”第二组:+$2);
}
$1
是集合名——它应该至少包含1个字符
$2
是介于开始标记和结束标记之间的所有内容(或任何内容)。这可以是0个或更多字符
如果我对字符串执行find()
:
它工作得很好,分配了$1
测试和$2
分配了
但是,如果我对该字符串执行find()
:
然后,$1
匹配测试
和$2
匹配
预期行为是第一个find()
应该有$1
匹配测试和$2
匹配
。然后第二个find()
应该有$1
匹配test2
和$2
匹配
我确信我忽略了一些显而易见的事情。谢谢 对此:
然后,$1匹配测试和$2匹配
听起来您使用的是以下表达式:(.*)
例如:
您的表达式(.*)
在您的示例字符串中适用,但我建议将您的表达式更改为以下格式,以便在引用文本为空时,至少引擎不会离开字符串的该区域:
事实证明,我的问题不在于语法或代码,正如许多人指出的那样,而是我在Eclipse中使用的Regex-Util插件。谢谢大家的帮助。我将学会信任我的代码并测试它,即使我的工具并不总是指示它应该工作 每当我在同一篇文章中看到XML和regex时,我只能想到这一点——爱那篇文章!幸运的是,这是一个非常具体和小的标记集,我可以完全控制格式。我在别处写“XML”字符串,然后在这里读它。也许我甚至不应该称之为XML。@Takamori:张贴一篇演示你行为的文章。我无法复制它。您提供的示例工作正常。@Takamori哦,那么解决方案很简单:改为编写和读取XML。