У меня есть строка ввода, которая будет следовать шаблону /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
Как я могу изменить свое регулярное выражение, чтобы сделать это?