为了还捕获 Oracle 和 MySQL JDBC URL 变体及其怪癖(例如 Oracle 允许使用@
代替//
或什至@//
),我使用此正则表达式来获取主机名:[/@]+([^:/@]+)([:/]+|$)
然后主机名在第 1 组中。
代码例如
String jdbcURL = "jdbc:oracle:thin:@//hostname:1521/service.domain.local";
Pattern hostFinderPattern = Pattern.compile("[/@]+([^:/@]+)([:/]+|$)");
final Matcher match = hostFinderPattern.matcher(jdbcURL);
if (match.find()) {
System.out.println(match.group(1));
}
这适用于所有这些 URL(和其他变体):
jdbc:oracle:thin:@//hostname:1521/service.domain.local
jdbc:oracle:thin:@hostname:1521/service.domain.local
jdbc:oracle:thin:@hostname/service.domain.local
jdbc:mysql://localhost:3306/sakila?profileSQL=true
jdbc:postgresql://production:5432/dbname
jdbc:postgresql://production/
jdbc:postgresql://production
这假设
请注意,它们+
是贪婪的,这对于中间的尤其重要。