String c = "([zkgj]|[ddsj]|[cxlb]){4}[_scp_]{5}([zk]|[js]){2}";String a ="zkgj_ssp_zk";System.out.println(a.matches(c));结果是true;把String a ="zkgj_stp_zk";等一些字母时,又是false;搞不清楚啊,大家看看这个是什么问题啊?运行环境java 1.4
String c = "([zkgj]|[ddsj]|[cxlb]){4}[_scp_]{5}([zk]|[js]){2}";String a ="zkgj_ssp_zk";System.out.println(a.matches(c));结果是true;把String a ="zkgj_stp_zk";等一些字母时,又是false;搞不清楚啊,大家看看这个是什么问题啊?运行环境java 1.4
2. [zkgj]表示zkgj其中任意一个字符 {4}表示由这4个字符组成的4个字符的串.
3. 你这里的|没有意义: [zkgj]|[ddsj]和[zkgjdds]没区别.
4. 你这个正则式写的有问题吧:
如果要实现zkgj或ddsj或cxlb应该写成(?:(?:zkgj)|(?:ddsj)|(?:cxlb))而不是[zkgj]|[ddsj]|[cxlb]){4}
|-----------1-----------| |----2---| |-----3------|这个正则表达式分析下:
1.( [zkgj] | [ddsj] | [cxlb] )表示:[zkgj] 或 [ddsj] 或 [cxlb]。
而[zkgj]表示:z、k、g或j;
[ddsj]表示:d、d、s或j;
[cxlb]表示:c、x、l或b;
{4}表示出现的次数恰好是4
总结下来就是:由z、k、g、j、d、d、s、j、c、x、l、b组成的长度为4的字符串2.[_scp_]表示:_、s、c、p、_;
{5}表示出现的次数恰好是5
总结下来就是:由_、s、c、p、_组成的长度为5的字符串3.[zk]表示:z或k
[js]表示:j或s
{2}表示出现的次数恰好是2
总结下来就是:由z、k、j或s组成的长度为2的字符串所以zkgj_ssp_zk符合正则表达式的要求;zkgj_stp_zk 的 _stp_中t是不符合的,所以返回false。
我对正则表达式不太清楚。请问 你的:(?:(?:zkgj)|(?:ddsj)|(?:cxlb)) 里面,?:的具体含义是什么呢。查API说是“作为非捕获组”,不太明白,能通俗点帮讲讲吗?
谢谢!