【问题标题】:Java bug? Different output on 2 identic regex's爪哇错误? 2个相同正则表达式的不同输出
【发布时间】:2009-06-05 13:15:37
【问题描述】:

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

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

【问题讨论】:

  • 为什么这么多人认为这是语言中的错误,而不是更仔细地检查自己的代码?
  • zahl 似乎是错误的 - 度数可以有 3 位数。这与您的问题无关,可能只是一个错误。
  • 标记问题时请注意提示提示。任何名称后面数字小于 10 的标签都可能是错误

标签: java regex


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    当然,只有在其余数据中所需的两个值之间始终存在“逗号空格”时,这才有效。

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 2010-10-12
      • 1970-01-01
      • 2020-02-21
      • 2022-06-10
      相关资源
      最近更新 更多