我有一个控制器,它需要提供两个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/([^/]+)(?:/([^/]+))?(?:/([^/]+))?(?:/([^/]+))?(?:/([^/]+))?(?:/([^/]+))?
可以达到五层深。。并将每个类别捕获为其自己的反向引用。如果需要匹配更深的内容,可以在行的末尾添加另一个(?:/([^/]+))?
。