日期:2014-05-20  浏览次数:20958 次

求一个正则表达式或者帮我改一下,先谢谢各位
^([^\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); 
}