Java 部分路径的正则表达式
我有这样的路径(单线): 我只需要与第三个“/”匹配的模式。换句话说,路径只包含“/”和最多前2个目录。然而,我的一些目录以“/”结尾,而有些则没有。所以我想要的结果是:Java 部分路径的正则表达式,java,regex,parsing,re2,sumologic,Java,Regex,Parsing,Re2,Sumologic,我有这样的路径(单线): 我只需要与第三个“/”匹配的模式。换句话说,路径只包含“/”和最多前2个目录。然而,我的一些目录以“/”结尾,而有些则没有。所以我想要的结果是: / /abc /def/ /ghi/jkl /mno/pqr/ /stu/vwx/ /abc/def/ 到目前为止,我已经尝试了(\/\124;。*\/),但这并不能使路径以“/”结尾。您需要一个类似^(\/\w+){0,2}/?$的模式,它检查(/和名称)的次数不超过2次,并且可以以/结尾 详情: ^:字符串的开头 (\
/
/abc
/def/
/ghi/jkl
/mno/pqr/
/stu/vwx/
/abc/def/
到目前为止,我已经尝试了
(\/\124;。*\/)
,但这并不能使路径以“/”结尾。您需要一个类似^(\/\w+){0,2}/?$
的模式,它检查(/
和名称)的次数不超过2次,并且可以以/
结尾
详情:
:字符串的开头^
:斜杠(转义)和字字符,都在一个组中(\/\w+)
组可以是0/1/2倍{0,2}
:斜杠(转义)可以是0或1倍\/?
我推荐这种模式:
/^(\/[^\/]+){0,2}\/?$/gm
它的工作原理如下:
搜索行首^
搜索路径元素(\/[^\/]+)
启动一个组(
搜索斜杠\/
搜索一些非斜杠字符[^\/]+
表示应该找到这些路径元素中的0到2个{0,2}
允许拖拉斜杠\/?
搜索行尾$
在输入中搜索多个匹配项g
将每一行视为单独的输入m
是字符串的开头^
表示在0到2次之间重复前面的步骤{0,2}
- 然后使用
?
- 字符串结尾是
,因此它不匹配较长的字符串$
围绕整个事件来捕获它()
(\/\124;。*\/)
使用一个交替选项,该选项匹配正斜杠或任何字符0+倍,然后匹配正斜杠
因此,在例如/ghi/jkl
中,第一个匹配将是第一个正斜杠。然后下一个模式的这部分*
将从第一个g
匹配到字符串的末尾。引擎将回溯到最后一个正斜杠,以填充整个*//code>模式
尾随的jkl
不能再被交替的两种模式匹配
请注意,您不必逃避正斜杠
您可以使用:
^/(?:\w+/?){0,2}$
在Java中:
String regex = "^/(?:\\w+/?){0,2}$";
解释
^
字符串的开头
/
匹配正斜杠
(?:
非捕获组
\w+
匹配1个以上的单词字符(如果您想匹配多于\w
的字符,可以使用a并添加您想要匹配的字符)
/?
匹配可选正斜杠
){0,2}
关闭非捕获组并重复0-2次
$
字符串的结尾
请注意,您不必转义正斜杠。您的正则表达式使用3个捕获组,其中,is忽略了外部组的右括号。您可以省略2个外部捕获组,而将内部捕获组设为非捕获组。此模式[^/]+
也将是一个换行字符,$
在您的说明中所指的位置缺失。
^((\/([^/]+){0,2}\/?)
String regex = "^/(?:\\w+/?){0,2}$";