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不是最好的解决方案吗?