Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过regexjava从预测API中提取参数_Java_Regex_Api - Fatal编程技术网

通过regexjava从预测API中提取参数

通过regexjava从预测API中提取参数,java,regex,api,Java,Regex,Api,我正在努力学习如何正确使用正则表达式,但不确定哪里出了问题。我正在尝试从forecast.io API中提取温度、最高温度、最低温度和图标。图标似乎是导致问题的参数,因为当我删除它时,所有其他参数都能完美工作。对于图标,我想提取任何单词,包括破折号(即部分多云的夜晚、雨、雪等)。API中参数的出现顺序与正则表达式中调用它们的方式相匹配 有问题的正则表达式: String re = ".*icon\":([\\-a-zA-Z]+),.*temperature\":([\\-0-9\\.]+),.*

我正在努力学习如何正确使用正则表达式,但不确定哪里出了问题。我正在尝试从forecast.io API中提取温度、最高温度、最低温度和图标。图标似乎是导致问题的参数,因为当我删除它时,所有其他参数都能完美工作。对于图标,我想提取任何单词,包括破折号(即部分多云的夜晚、雨、雪等)。API中参数的出现顺序与正则表达式中调用它们的方式相匹配

有问题的正则表达式

String re = ".*icon\":([\\-a-zA-Z]+),.*temperature\":([\\-0-9\\.]+),.*temperatureMin\":([\\-0-9\\.]+),.*temperatureMax\":([\\-0-9\\.]+),.*";
此处可以看到一个预测字符串示例:

我正在使用的字符串被进一步限制,因此仅显示每个属性的第一个实例(即,在示例中有多个“图标”的情况,在我将使用的字符串中,只有一个实例。)


谁能告诉我这个表达式有什么问题吗?

使用下面的正则表达式

String re = "\"(temperature|temperatureMin|temperatureMax)\":[0-9]+(\.)?[0-9]*|\"icon\":\"([a-zA-Z]|-)+\"";
这里
(.)表示0或1次出现。
[0-9]+表示出现一个或多个数字

[0-9]*表示0个或更多数字出现

您忘记在regexp的图标周围添加括号:

String re = ".*icon\":\"([\\-a-zA-Z]+)\",.*temperature\":([\\-0-9\\.]+),.*temperatureMin\":([\\-0-9\\.]+),.*temperatureMax\":([\\-0-9\\.]+),.*";

但我仍然建议使用以下方法解析Json:

JsonObject root = new JsonParser().parse(jsonStr).getAsJsonObject();
JsonArray dayArr = root.getAsJsonObject("daily").getAsJsonArray("data");
for (JsonElement elem : dayArr) {
    JsonObject elemObj = elem.getAsJsonObject();
    System.out.println(elemObj.getAsJsonPrimitive("icon") + "\t" +
            elemObj.getAsJsonPrimitive("temperatureMin") + "\t" +
            elemObj.getAsJsonPrimitive("temperatureMax"));
}

我们需要测试regexp的精确文本。这看起来很混乱。列出实际字符串和匹配规则。可能它不是文本的第一行?尝试用
“(?s)替换
”*“icon
。*icon
您的字符串是有效的json,因此您可以使用类似的方法来解析它。这不起作用,因为我还需要能够捕获负温度(“-”文字)。同样,温度块工作正常,它只是一个图标,我有问题。你的建议,增加括号工作。非常感谢你!几天来,我一直在努力让它发挥作用。