Spring映射正则表达式



我有一个控制器,它需要提供两个GET实现。第一个返回一个字符串,应该映射到如下路径:

/config/category/subCategory1//属性值

第二个返回一个映射,应该映射到看起来像这个的路径

/config/category/subCategory1//子类别4/

基本上不同的是,一条路径以"/"结尾,而另一条路径则没有。我尝试了几个选项,但没有一个适用于多个子类别级别。

谢谢你的想法。

第一种模式很简单,至少基于您的基本示例。您可能需要删除开头的/

/config/([^/]+)/.+/(.+)

我假设config/是静态的,所以我们将解决这个问题。。在那之后,我们捕获所有不是正斜杠的东西,当它遇到正斜杠时就会停止。这是背景参考#1。我们添加一个静态正斜杠,然后捕获直到最后一个正斜杠的所有内容,放入一个静态正向斜杠,然后一直捕获最后一个正向斜杠之后的所有内容直到字符串结束。

至于第二种图案

假设你有一个像这样的分类模式

/config/Computers/Hardware/Storage/Hard_Drives

Regex无法将无限递归捕获为单独的变量,但您可以像一样将其捕获为一个变量

/config/([^/]+)(/[^/]+)+

在上面的示例中,后引用1将包含Computers,而后引用2将包含/Hardware/Storage/Hard_Drives

你可以设计一个类似的正则表达式

/config/([^/]+)(?:/([^/]+))?(?:/([^/]+))?(?:/([^/]+))?(?:/([^/]+))?(?:/([^/]+))?

可以达到五层深。。并将每个类别捕获为其自己的反向引用。如果需要匹配更深的内容,可以在行的末尾添加另一个(?:/([^/]+))?

最新更新