我正在尝试验证字符串是否与正则表达式匹配。
网址格式为:key=value&key=value&....
键或值可以为空。
我的代码是:
Pattern patt = Pattern.compile("\\w*=\\w*&(\\w *=\\w*)* ");
Matcher m = patt.matcher(s);
if(m.matches()) return true;
else return false;
当我输入one=1&two=2
时,它显示为false,而它应显示为true。
任何想法!
答案 0 :(得分:1)
你需要的正则表达式是
Pattern.compile("(?:\\w+=\\w*|=\\w+)(?:&(?:\\w+=\\w*|=\\w+))*");
请参阅regex demo。它将匹配:
(?:\\w+=\\w*|=\\w+)
- 1个字母字符后跟=
,然后是0 +字字符(强制键,可选值)或=
后跟1个字字符(可选键) (?:&(?:\\w+=\\w*|=\\w+))*
- 零个或多个上述序列。String s = "one=1&two=2&=3&tr=";
Pattern patt = Pattern.compile("(?:\\w+=\\w*|=\\w+)(?:&(?:\\w+=\\w*|=\\w+))*");
Matcher m = patt.matcher(s);
if(m.matches()) {
System.out.println("true");
} else {
System.out.println("false");
}
// => true
要允许空格,请在需要的位置添加\\s*
。如果您还需要允许非单词字符,请使用[\\w.-]
代替\w
来匹配单词字符.
和-
(保留-
}在角色类的末尾。)