Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Regex Spring映射正则表达式_Regex_Spring Mvc - Fatal编程技术网

Regex Spring映射正则表达式

Regex Spring映射正则表达式,regex,spring-mvc,Regex,Spring Mvc,我有一个需要提供两个GET实现的控制器。 第一个返回一个字符串,应该映射到如下所示的路径: /config/category/subcategory 1/…/propertyValue 第二个返回一个映射,应该映射到如下所示的路径 /config/Computers/Hardware/Storage/Hard_Drives /config/([^\/]+)(\/[^\/]+)+ /config/([^\/]+)(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]

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

/config/category/subcategory 1/…/propertyValue

第二个返回一个映射,应该映射到如下所示的路径

/config/Computers/Hardware/Storage/Hard_Drives
/config/([^\/]+)(\/[^\/]+)+
/config/([^\/]+)(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]+))?
/config/category/subcategory 1/…/subcategory 4/

基本上不同的是,一条路径以“/”结尾,而另一条路径不以“/”结尾。我尝试过几种选择,但都不适用于多个级别的子类别


谢谢你的想法

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

\/config/([^\/]+)\/.+\/(.+)
我假设
config/
是静态的,所以我们将把它排除在外。。之后,我们捕获所有不是正斜杠的内容,当遇到正斜杠时,正斜杠将停止。这是反向参考。我们添加一个静态正斜杠,然后捕获所有内容直到最后一个正斜杠,添加一个静态正斜杠,然后捕获最后一个正斜杠之后的所有内容直到字符串结束

至于第二种模式

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

/config/Computers/Hardware/Storage/Hard_Drives
/config/([^\/]+)(\/[^\/]+)+
/config/([^\/]+)(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]+))?
Regex无法将无限递归作为单独的变量捕获,但是您可以像这样捕获一个变量

/config/Computers/Hardware/Storage/Hard_Drives
/config/([^\/]+)(\/[^\/]+)+
/config/([^\/]+)(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]+))?
在上面的示例中,反向参考1将包含
计算机
,反向参考2将包含
/硬件/存储/硬盘驱动器

你可以设计一个这样的正则表达式

/config/Computers/Hardware/Storage/Hard_Drives
/config/([^\/]+)(\/[^\/]+)+
/config/([^\/]+)(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]+))?(?:\/([^\/]+))?

这将达到五个层次的深度。。并捕获每个类别作为其自己的反向参考。如果您需要更深入的匹配,您可以在行的末尾添加另一个
(?:\/([^\/])?

您可以发布到目前为止已经尝试过的内容吗?我不知道从何处开始这个问题中的所有概念问题。看起来你完全错了,要么你想强迫spring使用格式错误的uri,要么你不想使用REST概念,比如路径参数。