我正在尝试从url中提取长度和长度:
<>之前来源:…传感器= false¢er = -15.842208999999999% 2 c - 48.023084变焦= 17大小= 256 x256&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;
}
我的正则表达式有什么问题?
您的方法get_matches
正在寻找m.group(1)
组在正则表达式中用括号定义。所以你的正则表达式应该是这样的:
(-?\d{2}\.?\d{6})
<<p> 在线演示/strong> 只选择一个符号作为可选符号,无论是-
还是.
-d{2}.?d{6}
等效java regex:
-\d{2}\.?\d{6}
或
-?d{2}.d{6}
等效java regex:
-?\d{2}\.\d{6}
演示调用m.group(0)
只打印匹配的字符串。如果你想调用m.group(1)
,那么你需要将模式括在括号内。