请教了,谢谢。
正则表达式只能做字符串匹配,对数值比较无能为力……
在字符编码里,0-9这十个字符是连续编码的和a-z是一个道理,没有谁大谁小的概念……
因此,只用正则表达式写起来不是很方便,建议加上转为数字后再判断:
public static void main(String[] args) {
for(int i=-13; i<=13; i++) {
String tempStr=String.valueOf(i);
if(isStrInRange(tempStr,-12,12)) {
System.out.println("字符["+tempStr+"]是-12和12之间的数字");
}else {
System.out.println("字符["+tempStr+"]不是-12和12之间的数字");
}
}
System.out.println(isStrInRange("-12test",-12,12));
}
/*
* 根据数值范围判断字符串是否匹配
*/
public static boolean isStrInRange(String myStr, int min, int max) {
boolean isNum=myStr.matches("^-?\\p{Digit}+$");
if(!isNum) return false;
int myNum=Integer.parseInt(myStr);
if(myNum>=min && myNum<=max) {
return true;
}else {
return false;
}
}
}
说明一下,
1, ^-?\p{Digit}+$ 这个正则表达式匹配任意整数(包含负整数),这里
\p{Digit}也可以用[0-9]来代替,这里还没有限制数字前面是否可以有0,即012认为也是数字,
限制前面不能有0可以稍作修改。
2, isStrInRange(String myStr, int min, int max) 这个方法判断字符串是否是数值,且在min和max范围内。
3, 测试main程序中用“-13”到“13”的字符串进行了测试,可看到结果中除了-13,和13外,都提示“是-12和12之间的数字”。
最后,"-12test"匹配这个字符串时,因为里面有其他字符,所以返回false。
有什么问题可以再提。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2014-06-27
package cn.xwy.action;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class regex {
public static void main(String[] args) {
String regex ="(\\-1[0-2]|\\-[1-9])|[0-9]|1[0-2]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher("-10");
if (m.matches()) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class regex {
public static void main(String[] args) {
String regex ="(\\-1[0-2]|\\-[1-9])|[0-9]|1[0-2]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher("-10");
if (m.matches()) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
第2个回答 2014-06-27
匹配负整数
^ -[1-9]+\d* $
匹配-12 -12整数 正则表达式里面没有直接写数字范围的方法,列举变换下
[-]{0,1}\d | [-]{0,1}1[0,1,2]
^ -[1-9]+\d* $
匹配-12 -12整数 正则表达式里面没有直接写数字范围的方法,列举变换下
[-]{0,1}\d | [-]{0,1}1[0,1,2]
第3个回答 2014-06-27
"-[1-12]*|[0-12]*"
简单的正则表达式
简单的正则表达式
第4个回答 2014-06-27
^\-[1-12][0-12]*$