我正在寻找一个匹配以下4个案例的单一正则表达式(抓住id,以便我可以重新编写网址)
http://localhost/gallery/test-name/123456
http://localhost/gallery/test-name/123456/
http://localhost/gallery/test-name/123456/video-name/159
http://localhost/gallery/test-name/123456/video-name/159/
当前正则表达式在下面,但在所有情况下都没有正确抓取ID。那里的任何专家都知道我做错了什么?
^(.*)/gallery/(.*)/([0-9]{1,15})(/)?((.*)/([0-9]{1,15})(/)?)?
答案 0 :(得分:3)
.*
(你第二次使用它)是贪婪的。因此它会消耗所有内容直到您的最后一个ID。这就是为什么第一个ID会丢失,如果你有两个。不要说它:
^(.*)/gallery/(.*?)/([0-9]{1,15})(/)?((.*?)/([0-9]{1,15})(/)?)?
如果您想为此添加更多参数,我还在最后?
添加了.*
。但是,无论如何,简单地拆分字符串/
可能会简单得多。
答案 1 :(得分:1)
只需将正则表达式中的第二个.*
更改为.*?
,您就应该获得所需的示例字符串捕获组:
^(.*)/gallery/(.*?)/([0-9]{1,15})(/)?((.*)/([0-9]{1,15})(/)?)?
答案 2 :(得分:1)
我知道这不是你想要的,但你有没有考虑过以下几点:
string l_url = "http://localhost/gallery/test-name/123456/video-name/159";
string l_id = l_url.Split( '/' )[5];
由于您没有指定语言,上面的内容是C#,但可以轻松转换为任何其他语言。