String patternLongitude1 ="/^((\\d|[1-9]\\d|1[0-7]\\d)[°](\\d|[0-5]\\d)[′](\\d|[0-5]\\d)(\\.\\d{1,2})?[\\″]?[E]|[W]$)|(180[°]0[′]0[\\″]?[E]|[W]$)/";String patternLongitude2 =             "/^[EW]?((\\d|[1-9]\\d|1[0-7]\\d)[\\s\\-,;°度](\\d|[0-5]\\d)[\\s\\-,;′分](\\d|[0-5]\\d)(\\.\\d{1,2})?[\\s\\-,;\"秒]?$)|(180[\\s\\-,;°度]0[\\s\\-,;′分]0[\\s\\-,;\"秒]?$)/";String patternLatitude1 ="/^((\\d|[1-8]\\d)[°](\\d|[0-5]\\d)[′](\\d|[0-5]\\d)(\\.\\d{1,2})?[\\″]?[N]|[S]$)|(90[°]0[′]0[\\″]?[N]|[S]$)/";

String patternLatitude2 = "/^[NS]?((\\d|[1-8]\\d)[\\s\\-,;°度](\\d|[0-5]\\d)[\\s\\-,;′分](\\d|[0-5]\\d)(\\.\\d{1,2})?[\\s\\-,;\"秒]?$)|(90[\\s\\-,;°度]0[\\s\\-,;′分]0[\\s\\-,;\"秒]?$)/";在网上找了两组经纬度的正则表达式。
从前台取得经纬度字符串,如:String LONGITUDE=“100°20′30″”;
为何LONGITUDE.matches(patternLongitude)匹配结果总是为false呢?
            

解决方案 »

  1.   

    不知道你的经纬度在数值上有什么限制
    把正则表达式的 /^ 改成 ^ 应该可以的
    不知道你想要什么格式的,如果不考虑数值限制,简单一点就可以了
    String patternLongitude = "^[EW]?[-]?\\d+[°度](\\s?\\d+[′分](\\s?\\d+[″秒]))?$";
    String patternLatitude = "^[EW]?[-]?\\d+[°度](\\s?\\d+[′分](\\s?\\d+[″秒]))?$";
    String LONGITUDE="100°20′30″";
    System.out.println(LONGITUDE.matches(patternLongitude));
      

  2.   

    String patternLongitude = "^[EW]?[-]?\\d+[°度](\\s?\\d+[′分](\\s?\\d+[″秒])?)?$";
    String patternLatitude = "^[NS]?[-]?\\d+[°度](\\s?\\d+[′分](\\s?\\d+[″秒])?)?$";
    String LONGITUDE="100°20′30″";
    System.out.println(LONGITUDE.matches(patternLongitude));
      

  3.   

    ++,java的正则不需要在开始结束加/,\\″ 秒不是双引号不用专业就算是双引号在java里面只需要字符串转义 而不需要正则转义 LZ找的正则必定不是java版的:)