从URL解析路径变量

时间:2012-02-17 08:58:51

标签: java regex

我必须实现与Spring PathVariable几乎相似的系统。我知道如何解析我自己的网址定义:

定义:

blog-{String}-{Integer}

代码:

Pattern p = Pattern.compile("\\{.+?\\}");
Matcher m = p.matcher(pathFormat);
while(m.find())
{
    String group = m.group();
    // ...
}

但是如何用我的格式解析真实的网址呢?如果真正的网址是

blog-my-first-blogging-10001

真实网址没有括号,因此如何使用正则表达式匹配我的群组。组的类型是已知的,但如何匹配没有括号?

2 个答案:

答案 0 :(得分:1)

目前还不清楚(至少对我来说)你要做的是什么,以下是我如何使用spring path变量:

@RequestMapping(value = "/{MyBlog}/{myVar}", method = RequestMethod.GET)
public ModelAndView getBlog(@PathVariable final String MyBlog, @PathVariable final Integer myVar)    {
  final ModelAndView mav  =  new ModelAndView(MyBlog);
  mav.addObject("myVar", myVar);
  // in actuality do lots of other thigns 
  return mav;
}

使用url http://myApp.com/AnyBlogName/21访问它,其中21可以是任意数字,AnyblogName可以是你想要的字符串。

答案 1 :(得分:1)

也许有点傻,但为什么不尝试:

 String restOfPath = pathFormat.substring(5); //eliminate 'blog-' prefix
 int lastDash = restOfPath.lastIndexOf('-'); //find the last '-'
 String title = restOfPath.substring(0, lastDash);  // take what's before '-'
 String id = restOfPath.substring(lastDash + 1); // take the rest.

...

除非您的路径比[{1}}更复杂,否则此处不需要正则表达式。