0

我有一个这种格式的字符串:

mydb://<user>:<password>@<host>:27017

我想使用 Java 正则表达式从字符串中提取<user><password>字符串。这样做的最好方法是什么?

编辑:

我希望能够在字符串的替换方法中使用这个正则表达式,这样我就只剩下相关的用户和密码字符串了

4

1 回答 1

5

你可以使用这个正则表达式(模式)

Pattern p = Pattern.compile("^mydb://([^:]+):([^@]+)@[^:]+:\\d+$");

然后捕获组 #1 和 #2 将分别拥有您的用户名和密码。

代码:

String str = "mydb://foo:bar@localhost:27017"; 
Pattern p = Pattern.compile("^mydb://([^:]+):([^@]+)@[^:]+:\\d+$");
Matcher matcher = p.matcher(str);
if (matcher.find())
    System.out.println("User: " + matcher.group(1) + ", Password: "
                        + matcher.group(2));

输出:

User: foo, Password: bar

编辑:根据您的评论:如果您想使用 String 方法,那么:

String regex = "^mydb://([^:]+):([^@]+)@[^:]+:\\d+$";
String user = str.replaceAll(regex, "$1");
String pass = str.replaceAll(regex, "$2")
于 2012-04-20T20:52:17.013 回答