【发布时间】:2011-11-09 08:59:18
【问题描述】:
我有一个输入字符串,它将遵循模式/user/<id>?name=<name>,其中<id> 是字母数字但必须以字母开头,<name> 是一个可以有多个空格的纯字母字符串。一些匹配示例如下:
/user/ad?name=a a
/user/one111?name=one ONE oNe
/user/hello?name=world
我想出了以下正则表达式:
String regex = "/user/[a-zA-Z]+\\w*\\?name=[a-zA-Z\\s]+";
以上所有示例都与正则表达式匹配,但它只查看<name> 中的第一个单词。序列\s 不应该允许我有空格吗?
我为测试它正在做什么而编写的代码是:
String regex = "/user/[a-zA-Z]+\\w*\\?name=[a-zA-Z\\s]+";
// Check to see that input matches pattern
if(Pattern.matches(regex, str) == true){
str = str.replaceFirst("/user/", "");
str = str.replaceFirst("name=", "");
String[] tokens = str.split("\\?");
System.out.println("size = " + tokens.length);
System.out.println("tokens[0] = " + tokens[0]);
System.out.println("tokens[1] = " + tokens[1]);
} else
System.out.println("Didn't match.");
例如,一项测试可能如下所示:
/user/myID123?name=firstName LastName
size = 2
tokens[0] = myID123
tokens[1] = firstName
而期望的输出是
tokens[1] = firstName LastName
我怎样才能改变我的正则表达式来做到这一点?
【问题讨论】: