Java bug? 2个相同正则表达式的不同输出

时间:2009-06-05 13:15:37

标签: java regex

我的正则表达式有两个来自相同代码的不同输出......但我不知道出了什么问题。这是一段代码,希望你能帮助我。谢谢!

String s = "48° 18′ 13,94″ nördliche Breite, "
         + "11° 34′ 31,98″ östliche Länge";

String kommazahl = "[0-9]{1,2}([\\.,][0-9]+)?";
String zahl = "[0-9]{1,2}";

Pattern p1 = Pattern.compile("("+ zahl +"[°/| ]{1,2}"+ zahl +"(['′/| ]{1,2}("+ kommazahl +")?)?).*"
                            +"("+ zahl +"[°/| ]{1,2}"+ zahl +"(['′/| ]{1,2}("+ kommazahl +")?)?).*");

Matcher m1 = p1.matcher(s);

System.out.println(m1.group(1) + "\n" + m1.group(5));

// Output should be:
// 48° 18′ 13,94
// 11° 34′ 31,98

// Output is:
// 48° 18′ 13,94
// 1° 34′ 31,98

2 个答案:

答案 0 :(得分:5)

.*贪婪地匹配11中的前1个,同时仍允许其余模式匹配。将.*替换为[^0-9]*之类的内容。

答案 1 :(得分:4)

问题是。*在模式第一行的末尾。那是贪婪地匹配“nördlicheBreite,1”。

也许您应该将其更改为捕获“。*”,以便知道何时停止?

Pattern p1 = Pattern.compile
    ("("+ zahl +"[°/| ]{1,2}"+ zahl +"(['′/| ]{1,2}("+ kommazahl +")?)?).*, "
    +"("+ zahl +"[°/| ]{1,2}"+ zahl +"(['′/| ]{1,2}("+ kommazahl +")?)?).*");

当然,只有在您希望在其余数据中使用两个值之间始终存在“逗号空间”时,才会有效。