gpt4 book ai didi

java - 为什么这个正则表达式在 Java 而不是 Groovy

转载 作者:搜寻专家 更新时间:2023-11-01 03:48:31 26 4
gpt4 key购买 nike

我正在尝试从 Oracle 网站提取 JDK 下载 URL 列表。我最初在 Go 中编写了一个工作版本,并尝试将其移植到 Groovy,以便它可以在 Jenkins 中运行。正则表达式在 Groovy 中不匹配。所以我用Java写了一个版本来解决问题:

以下 Java 代码成功:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
public static void main(String[] args) throws Exception {
URL oracle = new URL("http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html");
BufferedReader in = new BufferedReader(
new InputStreamReader(oracle.openStream()));

StringBuffer contents = new StringBuffer();
String inputLine;
while ((inputLine = in.readLine()) != null)
contents.append(inputLine+"\n");
in.close();

Pattern pattern = Pattern.compile("(http://download\\.oracle\\.com/otn/java/jdk/\\du\\d{2}-b\\d{1,2}/(jdk-\\du\\d{2}-(linux|windows)-x64\\.(exe|tar\\.gz)))");
Matcher matcher = pattern.matcher(contents);
assert matcher.matches();
}
}

然而(希望是等效的)Groovy 失败了:

URL url = new URL('http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html')
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuffer contents = new StringBuffer();
String inputLine
while ((inputLine = bufferedReader.readLine()) != null)
contents.append(inputLine + "\n");
bufferedReader.close();

def pattern = ~/(http\/\/download\.oracle\.com\/otn\/java\/jdk\/\du\d{2}-b\d{1,2}\/(jdk-\du\d{2}-(linux\|windows)-x64\.(exe\|tar\.gz)))/
def matcher = pattern.matcher(contents)
assert matcher.matches()

出于故障排除的目的,我试图尽量减少 Groovy 和 Java 版本之间的差异(是的 - 我知道在 Groovy 中有更多惯用的方法来获取 url)。

有人知道为什么 Groovy 版本会失败吗?

最佳答案

你最大的问题是你在第二个正则表达式中缺少 : (你有 http\/ 而不是 http:\/).之后,看起来它们应该匹配。

关于java - 为什么这个正则表达式在 Java 而不是 Groovy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35631851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com