其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

java 正则表达式问题,弄不明白

GG网络技术分享 2025-03-18 16:15 0


问题描述:

public static boolean checkNumber(String num,String type){  

String eL = \"\";

switch (type) {

case \"0+\":

eL = \"^//d+$\";//非负整数

break;

case \"+\":

eL = \"^//d*[1-9]//d*$\";//正整数

break;

case \"-0\":

eL = \"^((-//d+)|(0+))$\";//非正整数

break;

case \"-\":

eL = \"^-//d*[1-9]//d*$\";//负整数

break;

default:

eL = \"^-?//d+$\";//整数

break;

}

Pattern p = Pattern.compile(eL);

Matcher m = p.matcher(num);

boolean b = m.matches();

return b;

}

String ss = \"333\";
out.println(isType.checkNumber(ss,\"+\"));

    百度里找的例子,为什么传入任何数字都是false

网友观点:

试试把//d改为\\d

把你的// 全部改成\\
case \\\"+\\\":
eL = \\\"^\\d*[1-9]\\d*$\\\";//正整数

..... 上面应该有两个\\ csdn把两个\\都改成了一个

楼主疑惑完整解答,一楼给出了验证数字的语法,虽然可以验证数字,但没解释清楚。确实如此,把//改成\\就可以正确判断了。为什么不管输入什么数字,此表达式 eL = \\\"^//d*[1-9]//d*$\\\";//正整数 ,一直匹配出错false,因为这个语句代表的是匹配//d这样的字符串(你输入//d,就会得出true),所以输入数字当然出错,百度的方法可能考虑到转译,只不过用反了。(mark)

Java 中正则表达式组的问题. ip = ip.replaceAll("(\\\\d{1,3})", "00$1"),为什么这个就能把 192 分为一个组,而不是把 1 分为一个组?不是说 {1,3} 就是一到三个都行吗?为什么偏选三个?

如果有多个匹配可能,就选择最长的那个,这是正则表达式的默认 greedy match(贪婪匹配)。如果在 {1,3} 后面放一个问号,变为 \\d{1,3}? 它就会选择最短的那个匹配,这样的匹配就是 lazy match(懒惰匹配)。不过这样一来,1、9、2 每一个数字都会被匹配到,这应该不是你要的。

标签:

提交需求或反馈

Demand feedback