java pattern 正则表达式 验证 用逗号隔开的序列(不要说substring)。
比如aaa,bb,cc,ddd,e(开头结尾不能是逗号)我写的Pattern[^,](,\\w+)+不知道为什么Matcher.matcher()是false。想让开头不...
比如 aaa,bb,cc,ddd,e (开头结尾不能是逗号)
我写的Pattern
[^,](,\\w+)+
不知道为什么 Matcher.matcher() 是false。想让开头不能是逗号要怎么写?
我试过\\w+(,\\w+)* 这么写,但有个问题
假如这些序列之间用;隔开,那就要写成
\\w+(,\\w+)*(;\\w+(,\\w+)*)*
如果上面的序列还可以用冒号隔开那就成了
\\w+(,\\w+)*(;\\w+(,\\w+)*)*(:\\w+(,\\w+)*(;\\w+(,\\w+)*)*)*
如果上面的序列还可以用-隔开那就成了
\\w+(,\\w+)*(;\\w+(,\\w+)*)*(:\\w+(,\\w+)*(;\\w+(,\\w+)*)*)*(-\\w+(,\\w+)*(;\\w+(,\\w+)*)*(:\\w+(,\\w+)*(;\\w+(,\\w+)*)*)*)*
这样\\w+ 就要重复16次,当然我是举个简单例子,因为我是对表单字符串格式验证是否validate,实际需求的规则要比这个复杂得多……
所以我的想法是匹配 aaa,bb,cc,ddd,e 用 (,\\w+)+ 然后禁止第一个位是 逗号 ,那要怎么去写啊? 展开
我写的Pattern
[^,](,\\w+)+
不知道为什么 Matcher.matcher() 是false。想让开头不能是逗号要怎么写?
我试过\\w+(,\\w+)* 这么写,但有个问题
假如这些序列之间用;隔开,那就要写成
\\w+(,\\w+)*(;\\w+(,\\w+)*)*
如果上面的序列还可以用冒号隔开那就成了
\\w+(,\\w+)*(;\\w+(,\\w+)*)*(:\\w+(,\\w+)*(;\\w+(,\\w+)*)*)*
如果上面的序列还可以用-隔开那就成了
\\w+(,\\w+)*(;\\w+(,\\w+)*)*(:\\w+(,\\w+)*(;\\w+(,\\w+)*)*)*(-\\w+(,\\w+)*(;\\w+(,\\w+)*)*(:\\w+(,\\w+)*(;\\w+(,\\w+)*)*)*)*
这样\\w+ 就要重复16次,当然我是举个简单例子,因为我是对表单字符串格式验证是否validate,实际需求的规则要比这个复杂得多……
所以我的想法是匹配 aaa,bb,cc,ddd,e 用 (,\\w+)+ 然后禁止第一个位是 逗号 ,那要怎么去写啊? 展开
展开全部
\\w+(,\\w+)* 这个是最合理的。
如果有多层次序列,建议先识别最外层序列。
然后提取内容,依次识别内层序列。
不一定要一个正则搞定,可以多个正则结合循环。
public boolean matcher(String input) {
for (String str1 : input.split(":")) {
for (String str2 : str1.split(";")) {
for (String str3 : str2.split(",") {
if (!str3.matchers("\\w+")) {
return false;
}
}
}
}
return true;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询