嗨我有一个Java程序运行并找到我的机器经度和纬度坐标,它输出如下面的长字符串显示,
的htt://maps.google.com/maps Q = 52.258301,+ - 7.111900+(192.168.159.1Country:爱尔兰,城市:沃特福德逐 HTT://www.javaquery.com)及iwloc = A和HL = EN
我现在要做的是只从这个字符串中提取:IP地址和两个坐标,我已成功获取IP地址,但似乎无法获得两个坐标。 希望最终结果是
192.168.159.1,52.258301,+ - 7.111900
到目前为止,我已使用这些表达式获取IP地址
(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
哪种方法效果很好 然后尝试使用此
获取坐标[0-9]+(\\.[0-9][0-9]?)?
但它只获得第一个坐标,然后再次
由于
答案 0 :(得分:1)
试试这个正则表达式:
"(?<=\\?q=)([^(]*)\\(([\\d.]*)"
group(1)
是52.258301,+-7.111900+
group(2) is the ip
编辑为正则表达式匹配/提取添加代码
String regex = "(?<=\\?q=)([^(]*)\\(([\\d.]*)";
String s = "htt://maps.google.com/maps?q=52.258301,+-7.111900+(192.168.159.1Country:Ireland,City:Waterford-by htt://www.javaquery.com)&iwloc=A&hl=en";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println(m.group(2));
System.out.println(m.group(1));
}
输出:
192.168.159.1
52.258301,+-7.111900+
答案 1 :(得分:0)
提取两个坐标而不使用正则表达式的方法可以是:
String str="http://maps.google.com/maps?q=52.258301,+-7.111900+(192.168.159.1Country:Ireland,City:Waterford-by htt://www.javaquery.com)&iwloc=A&hl=en";
int index_x=str.indexOf("?q=")+"?q=".length();
int index_x_end=str.indexOf(",");
int index_y=index_x_end+",".length();
int index_y_end=str.indexOf("+(");
System.out.println(str.substring(index_x, index_x_end)); //prints 52.258301
System.out.println(str.substring(index_y, index_y_end)); //prints +-7.111900