gpt4 book ai didi

java - 为什么此代码(使用正则表达式从 URL 中提取主机名)失败

转载 作者:行者123 更新时间:2023-11-29 03:21:33 24 4
gpt4 key购买 nike

我正在尝试将 url 中的主机名与正则表达式和组进行匹配。我编写此测试是为了模拟可接受的输入。

为什么这段代码会失败?

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {

public static void main(String[] args)
{
Pattern HostnamePattern = Pattern.compile("^https?://([^/]+)/?", Pattern.CASE_INSENSITIVE);

String[] inputs = new String[]{

"http://stackoverflow.com",
"http://stackoverflow.com/",
"http://stackoverflow.com/path",
"http://stackoverflow.com/path/path2",
"http://stackoverflow.com/path/path2/",
"http://stackoverflow.com/path/path2/?qs1=1",

"https://stackoverflow.com/path",
"https://stackoverflow.com/path/path2",
"https://stackoverflow.com/path/path2/",
"https://stackoverflow.com/path/path2/?qs1=1",
};

for(String input : inputs)
{
Matcher matcher = HostnamePattern.matcher(input);
if(!matcher.matches() || !"stackoverflow.com".equals(matcher.group(1)))
{
throw new Error(input+" fails!");
}
}

}

}

最佳答案

这是因为您的正则表达式 ^https?://([^/]+)/? 和您对 Matcher#matches 方法的调用期望匹配完全输入。

你需要使用:

matcher.find()

否则您的正则表达式将只匹配前 2 个输入字符串:http://stackoverflow.comhttp://stackoverflow.com/

关于java - 为什么此代码(使用正则表达式从 URL 中提取主机名)失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23343488/

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