Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式变得太贪婪(Java/android)_Java_Android_Xml_Regex - Fatal编程技术网

正则表达式变得太贪婪(Java/android)

正则表达式变得太贪婪(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

我有一个XML样式的字符串,我正试图在
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。