Regex 用于排除和捕获可选子字符串的正则表达式
我有这个字符串:Regex 用于排除和捕获可选子字符串的正则表达式,regex,Regex,我有这个字符串: A. rest/asks/foo.bar.json B. rest/asks/foo.bar 我需要一个正则表达式,它允许我捕获以下子字符串: 1. 'rest' 2. 'asks' 3. '/foo.bar'(optional) 4. '.json' (optional) 我花了几个小时寻找解决方案,但不幸的是没有找到解决方案 我试过这个: ^(rest)\/([^\/\.]+)(.+)?(?=(\.json)) ^(rest)\/([^\/\.]+)(.+)?(?=(
A. rest/asks/foo.bar.json
B. rest/asks/foo.bar
我需要一个正则表达式,它允许我捕获以下子字符串:
1. 'rest'
2. 'asks'
3. '/foo.bar'(optional)
4. '.json' (optional)
我花了几个小时寻找解决方案,但不幸的是没有找到解决方案
我试过这个:
^(rest)\/([^\/\.]+)(.+)?(?=(\.json))
^(rest)\/([^\/\.]+)(.+)?(?=(\.json)?)
但是在这种情况下需要\.json
结果:
A.rest/asks/foo.bar.json
1. [0-4] `rest`
2. [5-9] `asks`
3. [9-17] `/foo.bar`
4. [17-22] `.json`
1. [0-4] `rest`
2. [5-9] `asks`
3. [9-17] `/foo.bar.json`
B.rest/ask/foo.bar
Your pattern does not match the subject string.
1. [0-4] `rest`
2. [5-9] `asks`
3. [9-17] `/foo.bar`
我试过这个:
^(rest)\/([^\/\.]+)(.+)?(?=(\.json))
^(rest)\/([^\/\.]+)(.+)?(?=(\.json)?)
结果:
A.rest/asks/foo.bar.json
1. [0-4] `rest`
2. [5-9] `asks`
3. [9-17] `/foo.bar`
4. [17-22] `.json`
1. [0-4] `rest`
2. [5-9] `asks`
3. [9-17] `/foo.bar.json`
B.rest/ask/foo.bar
Your pattern does not match the subject string.
1. [0-4] `rest`
2. [5-9] `asks`
3. [9-17] `/foo.bar`
有人能帮我吗
如何使表达式匹配所需的子字符串
您可以在此处测试正则表达式:- 使用OR语句将
或$
放在末尾:.json
(?=$)(\.json))
- 使捕获“foo.bar”的模式不贪婪:
,以不捕获(.+?)?
.json
你不需要积极地向前看
(.*)(\.json)
会将\.json
前面的字符捕获到一个可选组中,并将.json
捕获到另一个可选组中
^(rest)\/([^\/\.]+)(.*?)(\.json)?$
您的第一个正则表达式很好,但您忘记了一件事:您可以在没有.json的情况下完成: 为此,您必须说明您可以使用.json或行尾$:
(?=$|(\.json))
然后你有:^(rest)\/([^\/\.]+)(.+?)(?=$)(\.json))
(查看匹配信息的右侧面板)
希望能有帮助。这对男人来说很有效!谢谢!您在哪里生成的图表?很好,但是您需要将
(?:(.+?)(\.json)
更改为(?(.+?)(\.json)?`以使其成为可选的。如果没有,它将无法在rest/ask中正常工作。