我有这个条件:
A. rest/asks/foo.bar.json
B. rest/asks/foo.bar我需要一个正则表达式,它允许我捕获以下子字符串:
1. 'rest'
2. 'asks'
3. '/foo.bar'(optional)
4. '.json' (optional)我花了几个小时寻找解决办法,但不幸的是没有找到解决办法
试过这个:
^(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`B. rest/asks/foo.bar
Your pattern does not match the subject string.试过这个:
^(rest)\/([^\/\.]+)(.+)?(?=(\.json)?)结果:
A. rest/asks/foo.bar.json
1. [0-4] `rest`
2. [5-9] `asks`
3. [9-17] `/foo.bar.json`B. rest/asks/foo.bar
1. [0-4] `rest`
2. [5-9] `asks`
3. [9-17] `/foo.bar`有谁可以帮我?
我怎样才能像我所需要的那样将其表示为matche子串呢?
您可以在这里测试正则表达式:http://regex101.com/
发布于 2014-10-31 08:32:04
$或.json放在末尾:(?=$|(\.json))(.+?)?,以不捕获.json^(rest)\/([^\/\.]+)(.+?)?(?=$|(\.json))

发布于 2014-10-31 08:36:29
您的第一个正则表达式很好,但是您忘记了一件事:您可以在没有.json的情况下完成:
为此,您必须说您可以使用.json或行$:(?=$|(\.json))的末尾
那么你有:^(rest)\/([^\/\.]+)(.+?)?(?=$|(\.json))
演示 (查看匹配信息的右侧面板)
希望能帮上忙。
发布于 2014-10-31 08:36:09
你不需要积极向前看。(.*?)(\.json)?会将\.json之前的字符捕获到可选组,并将.json捕获到另一个可选组。
^(rest)\/([^\/\.]+)(.*?)(\.json)?$演示
https://stackoverflow.com/questions/26670282
复制相似问题