我需要从命名捕获组中的字符串中检索uri
例子uri是
/cu/rest/en_US/reports/execute/310F02501000016D001218A1AZ6B2D16
/cu/rest/en_US/reports/execute/newResource/
/cu/rest/en_US/link/xml
如果字符串中包含“ execute”,则正则表达式应跳过“ execute”之后出现的字符,否则应匹配给定字符串中的整个uri
我当前使用的正则表达式是
(?P<value>\S+)
即使其中包含“执行”,这也会将整个uri匹配为“值”。
是否可以基于哪个“值”设置为包含整个uri或跳过其中一部分的条件正则表达式?
对于上面的3个示例,“值”应为
您可以使用
^(?P<value>\S*?(?:/execute(?![^/])|$))
或者,使用经过磨炼的贪婪令牌:
^(?P<value>(?:(?!/execute/)\S)*)
细节
^
-字符串开始(?P<value>\S*?(?:/execute(?![^/])|$))
-组“值”:
\S*?
-0个或多个非空格字符,尽可能少 (?:/execute(?![^/])|$)
-非捕获组匹配
/execute(?![^/])
-/execute
子字符串后跟/
或字符串结尾(请注意(?![^/])
= (?=/|$)
,但效率更高,因为它不包含任何替换,只需要执行1步)|
- 要么$
-字符串结尾。在(?:(?!/execute/)\S)*
刚刚匹配任何非空白字符(\S
),0个或多个(*
),不启动/execute/
字符序列。请注意,以防万一,您应在之后检查所有斜线或字符串结尾/execute
,请使用/execute(?![^/])
代替/execute/
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句