public static void getHostFrom(String url) {
// (?<db>\w+) \w:匹配任何字类字符,包括下划线与"[A-Za-z0-9_]"等效;+:一次或多次匹配前面的字符或子表达式
// 表示 匹配一堆字符
// .* 表示会出现零次或者多次 .
// ((//)|@) 表示 // 或者 @
// (?<host>.+) 表示一次或多次出现 .
// (?<port>\d+) 表示一次或多次出现数字字符
// (/|(;DatabaseName=)|:) 表示 / 或者 ;DatabaseName= 或者 :
// (?<dbName>\w+) 表示会出现一次或多次任何字类字符
// \\??.* \\??表示零次或一次匹配?、.*表示会出现零次或多次
Pattern p = Pattern.compile("jdbc:(?<db>\\w+):.*((//)|@)(?<host>.+):(?<port>\\d+)(/|(;DatabaseName=)|:)(?<dbName>\\w+)\\??.*");
Matcher m = p.matcher(url);
if(m.find()) {
System.out.println("db: " + m.group("db"));
System.out.println("host: " + m.group("host"));
System.out.println("port: " + m.group("port"));
System.out.println("dbName: " + m.group("dbName"));
System.out.println();
}
}
public static void main(String[] args) {
getHostFrom("jdbc:mysql://127.0.0.1:3306/databaseName_1?aaa=bbb&ccc=ddd");
getHostFrom("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=databaseName;");
getHostFrom("jdbc:oracle:thin:@localhost:1521/dbName");
getHostFrom("jdbc:oceanbase://localhost:1521/dbName");
}