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+)+ 然后禁止第一个位是 逗号 ,那要怎么去写啊?
展开
 我来答
fuhaiwei
2014-09-04 · TA获得超过3409个赞
知道大有可为答主
回答量:974
采纳率:75%
帮助的人:1384万
展开全部

\\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;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式