^([^\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); }