Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为URI路径创建正则表达式_Java_Regex - Fatal编程技术网

Java 为URI路径创建正则表达式

Java 为URI路径创建正则表达式,java,regex,Java,Regex,我需要解析这个字符串“//save”,并且我必须确保productId是一个32位的无符号整数 当然,我可以使用“/”字符拆分字符串,然后在返回的数组中尝试将产品Id转换为整数,看看是否出现异常,但这似乎不是一个非常优雅的解决方案 相反,我尝试使用这个正则表达式boolean match=path.matches(“\\/\\d+\\\/save”)工作正常,但不受32位整数的限制,基本上我可以输入任意大小的数字 也就是说,下面的inf字符串/44444/save”与正则表达式匹配 有什么更优雅

我需要解析这个字符串
“//save”
,并且我必须确保productId是一个32位的无符号整数

当然,我可以使用“/”字符拆分字符串,然后在返回的数组中尝试将产品Id转换为整数,看看是否出现异常,但这似乎不是一个非常优雅的解决方案

相反,我尝试使用这个正则表达式
boolean match=path.matches(“\\/\\d+\\\/save”)
工作正常,但不受32位整数的限制,基本上我可以输入任意大小的数字

也就是说,下面的inf字符串
/44444/save”
与正则表达式匹配


有什么更优雅的方法可以做到这一点?你能给我推荐一种方法吗?

这里有一种解决方案可以解决这个数字太大的可能性:

@Test
public void testMatchIntWithRegex() {
    String rgx = "\\/(\\d+)\\/save";
    String example = "/423/save";
    String exampleB = "/423666666666666666666666666666666666666666/save";

    Pattern p = Pattern.compile(rgx);
    Matcher m = p.matcher(example);
    if(m.find()){
        String sInt = m.group(1);
        try{
            int num = Integer.parseInt(sInt);
            System.out.println("num is : " + num);
        } catch(NumberFormatException e){
            e.printStackTrace();
        }


    }

}

示例在exampleB抛出异常时起作用

最优雅的方式显然是不要尝试使用正则表达式检查数字(这是可能的,但丑陋且低效),所以提取它并用一个简单的比较来检查它。如果你想的话,你可以限制模式中的位数。如果没有一些非常难看的正则表达式,就不能使用重复的正则表达式来检查积分边界。为了给人一个想法,对于一个8位的数字,你必须编写如下内容:
1[0-9]{0,2}2(?[0-4][0-9]?[5[0-5]?[6-9])?[3-9][0-9],想象一个32位的数字相同。但是海报也在URI模式的中间寻找Num,所以ReGEX不是最好的解决方案吗?