我有一個輸入字符串,它將遵循模式/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
如何更改我的正則表達式來執行此操作?
小挑剔:這正則表達式也匹配以數字開頭的ID。 – Matt
真的.. OP的不;)因爲它的作業標記,我會留下它作爲一個練習;) – aioobe
哈哈,好吧,+1 :) – Matt