我有一个非常简单的正则表达式问题。假设我有两个条件:
如何使用正则表达式提取baseUrl?
示例输出:
答案 0 :(得分:8)
像这样:
String baseUrl;
Pattern p = Pattern.compile("^(([a-zA-Z]+://)?[a-zA-Z0-9.-]+\\.[a-zA-Z]+(:\d+)?/");
Matcher m = p.matcher(str);
if (m.matches())
baseUrl = m.group(1);
但是,您应该使用URI
class代替,如下所示:
URI uri = new URI(str);
答案 1 :(得分:2)
没有正则表达式的单线:
String baseUrl = url.substring(0, url.indexOf('/', url.indexOf("//")+2));
答案 2 :(得分:1)
/^(https?\:\/\/[^\/]+).*/$1/
这将捕获以http开头的任何内容,$ 1将包含从开始到第一个/之后的所有内容//
答案 3 :(得分:1)
除了写入和丢弃脚本之外,总是不要使用正则表达式来解析复杂的语法(电子邮件地址,网址,html页面等)。
相信我,你最终会被咬伤。答案 4 :(得分:0)
我很确定有一个允许路径操作的Java类,但如果它必须是一个正则表达式,
https?://[^/]+
会奏效。 (包含s?
也可以处理https:
)
答案 5 :(得分:0)
对于您的两个具体示例,最简单的解决方案似乎是模式:
[^/]_//[^/]+
即:非斜线(0次或更多次),两次斜杠,非斜杠(0次或更多次)。如果你愿意,你可以比这更严格,因为现有的两个答案是以不同的方式做的 - 一个人会拒绝,例如以ftp:
开头的网址,另一个会拒绝带有下划线的网址(但接受没有前导protocol://
的网址,因此在这方面甚至比我的更广泛)。这些答案(所有正确的,你的规格都不正确;-)应该告诉你,你的规格太模糊,应该收紧。
答案 6 :(得分:0)
这是一个应该满足给定问题的正则表达式。
https?://[^/]*
我假设你这部分要求获得更多关于正则表达式的知识。但是,如果您尝试从URL中提取主机,那么使用Java更强大的解析方法可能更为正确:
String urlStr = "https://www.abc.com/stuff";
URL url = new URL(urlStr);
String host = url.getHost();
String protocol = url.getProtocol();
URL baseUrl = new URL (protocol, host);
这样做会更好,因为如果您的输入网址不像上面描述的那么严格,它会捕获更多的情况。
答案 7 :(得分:0)
旧帖子..我想我也可以对一个简单的正则表达式问一个简单的答案:
(http|https):\/\/(www.)?(\w+)?\.(\w+)?