Ява извлечь элементы адреса с помощью регулярных выражений - PullRequest
1 голос
/ 21 марта 2011

У меня есть строка: user1: password@192.168.1.3: 3306 / dbname1 и мне нужно заполнить имя пользователя, пароль, хост, порт и переменные dbname ... мой код:

String patternStr = "(\b[A-Z0-9._%+-]+):([A-Z]+)@([A-Z0-9.-]+):([0-9]{1,5})/([A-Z0-9_-]+)";
Pattern p = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
Matcher matcher = p.matcher(dbpath);
System.out.println(matcher.matches());

Выход:

false

:( покажи мне мою ошибку, пожалуйста ... Спасибо.

Ответы [ 4 ]

4 голосов
/ 21 марта 2011

Вот гораздо более простая версия, которая не на 100% верна, но она делает работу в вашем случае:

String dbpath = "user1:password@192.168.1.3:3306/dbname1";
String patternStr = "([^:]+):([^@]+)@([^:]+):([^/]+)/(.+)";
Pattern p = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
Matcher matcher = p.matcher(dbpath);
System.out.println(matcher.matches());

// Output: true
3 голосов
/ 21 марта 2011

Вот решение вашей непосредственной проблемы. Замены

\b

с

\\b

Обратные слеши должны быть экранированы в Java. Я попробовал это с этим:

"(\\b[A-Z0-9._%+-]+):([A-Z]+)@([A-Z0-9.-]+):([0-9]{1,5})/([A-Z0-9_-]+)"

А твой код напечатан true.

3 голосов
/ 21 марта 2011
class AddressRegex {
    public static void main(String[] args) {

        String dbpath = "user1:password@192.168.1.3:3306/dbname1";       

        // I should point out my coworker is wrong when he says this is a
        // guy eating too big a sandwich!! It's just a set of delimiters!
        String[] tokens = dbpath.split(":|@|/");

        String user = tokens[0];
        String host = tokens[1];
        String port = tokens[2];
        String dbid = tokens[3];

        System.out.println(user);
        System.out.println(host);
        System.out.println(port);
        System.out.println(dbid);


    }

}
1 голос
/ 21 марта 2011
String input = "user1:password@192.168.1.3:3306/dbname1";
Scanner scanner = new Scanner(input).useDelimiter("[:@/]");
String user = scanner.next();
String password = scanner.next();
String host = scanner.next();
int port = scanner.nextInt();
String dbName = scanner.next();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...