当前位置: 代码迷 >> J2EE >> 正则表达式或者帮小弟我改一下,先多谢各位
  详细解决方案

正则表达式或者帮小弟我改一下,先多谢各位

热度:370   发布时间:2016-04-22 03:32:48.0
求一个正则表达式或者帮我改一下,先谢谢各位
^([^\uFF00-\uFFFF]{0,32}){0,1}([\uFF00-\uFFFF]{0,16}){0,1}$
这个正则式匹配用户输入的半角字符数32位之间和或全角字符数16位之间
但是我的这个正则可以匹配先输入半角全角的 或者输入全角的 混和输入不支持
怎么做呢 我不会了

------解决方案--------------------
楼主,你的问题并不是没人回答,而是人家都看不懂要做什么:

这个正则式匹配用户输入的半角字符数32位之间和或全角字符数16位之间

1,什么叫 XX 位之间啊?
2,你是要只匹配数字的全角、半角,还是所有字符的全角、半角?
3,具体要做些什么你都没有说,只说了你写的表达式如何如何

上面仅仅是从题目看出来的问题,如果能说得详细清楚的话,可以帮你解决。

你说的这些我是一句都没看懂。

如果要问正则表达式的问题,请把具体的要求讲清楚,比如说一些示例,
以及要达到的效果,说得越详细正则表达式的匹配的容错性就越强。

------解决方案--------------------
Java code
public static void main(String[] args) throws IOException { String str = "123456三四五六七八十738912345一6789012六35678901一二三四五六一一"; String regex1 = "(?=(?:[^\u0000-\u00ff]*[\u0000-\u00ff][^\u0000-\u00ff]*){0,32}$).{0,48}"; String regex2 = "(?=(?:[\u0000-\u00ff]*[^\u0000-\u00ff][\u0000-\u00ff]*){0,16}$).{0,48}"; System.out.println(str.matches(regex1)); System.out.println(str.matches(regex2)); System.out.println(str.length()); char[] cs = str.toCharArray(); int a = 0, b = 0; for(char c : cs) { if(c > 0xff){ b++; }else{ a++; } } System.out.println("半角个数:" + a + ",全角个数:" + b); }