我的正则表达式有什么问题 - ?\\ d {2} \\。?\\ d {6}

时间:2014-07-27 13:37:56

标签: java android regex eclipse netbeans

我尝试从网址中提取lat和long:

source:
...sensor=false¢er=-15.842208999999999%2C-48.023084&zoom=17&size=256x256&language=en&client=google-maps-frontend&signature=hbey3U4lycTNgX48asW8MODjJLM

我在正则表达式方面表现不佳,所以我使用了这个正则表达式测试器(http://regexpal.com/)并对此正则表达式进行了编码

-?\d{2}\.?\d{6}
(适用于JAVA) )

它产生了这个结果(谁说它是regexpal.com):

-15.842208 ... -48.023084

所以当我这样做时(在java中):

for (Element element : newsHeadlines) {
        if(element.toString().contains("https://maps.google.com")){
            List<String> lista = get_matches(element.attr("content"), "-?\\d{2}\\.?\\d{6}");


        }
    }

public static List<String> get_matches(String s, String p) {
    // returns all matches of p in s for first group in regular expression 
    List<String> matches = new ArrayList<String>();
    Matcher m = Pattern.compile(p).matcher(s);
    while(m.find()) { 
        matches.add(m.group(1)); //<-- Exception m.group(1) not have any results.
    }
    return matches;
}

我的正则表达式有什么问题?

2 个答案:

答案 0 :(得分:2)

您的方法get_matches正在寻找带有括号的正则表达式中定义的m.group(1)个组。你的正则表达式需要像这样:

(-?\\d{2}\\.?\\d{6})

Online Demo

答案 1 :(得分:1)

只需将一个符号设为可选,无论它是-还是.

-\d{2}\.?\d{6}

等效的java正则表达式:

-\\d{2}\\.?\\d{6}

OR

-?\d{2}\.\d{6}

等效的java正则表达式:

-?\\d{2}\\.\\d{6}

DEMO

并致电m.group(0)仅打印匹配的字符串。如果要调用m.group(1),则需要将模式括在paranthesis中。