パターン/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
正規表現を変更するにはどうすればよいですか?
マイナーnitpick:この正規表現はまた、数字で始まるのIDと一致したが、リング)、あなたはそれが消極作る
?
()を追加して、正規表現を変更する必要がありそう。 – Matt真実.. OPはしません;それは宿題とタグ付けされているので、私は練習として残します;) – aioobe
ハハ、ok、+1 :) – Matt