我有一个字符串:
/foo/bar
以及以下正则表达式:
/(?P<g1>.*)/(?P<g2>.*)$
字符串与模式匹配,并捕获两个组:
g1 = foo
g2 = bar
如何强制选择匹配?
我需要那个&#34; / bar&#34;被捕获到g1 =&#34; bar&#34; (但不是/ bar /)如果没有第二组可以匹配吗?
(使用regex101进行测试)
由于
答案 0 :(得分:2)
你需要一个字符串锚^
的开头来限制字符串只有2个slahses。而且正如Avinash Raj所说,你需要让正则表达式的某些部分可选。
^/(?P<g1>[^/\n]*)/?(?P<g2>[^/\n]*)?(?<!/)$
请参阅demo
\n
仅在多线模式下是必需的,因此[^/]
无法与换行符匹配。
REGEX EXPLANATION :
^/
- 字符串和文字/
(?P<g1>[^/\n]*)
- 第一个必须匹配的捕获组(必须匹配一次),但匹配任何字符,/
(或\n
,如果你保留它),0次或更多次/?
- 0或1 /
字符(?P<g2>[^/\n]*)?
- 可选的第二个捕获组,匹配/
和\n
以外的0个或多个字符(?<!/)$
- 以/
以外的字符开头的字符串结尾。