正则表达式,url中的可选匹配项

时间:2013-04-02 16:17:34

标签: regex pattern-matching optional

我花了几个小时没有好结果(也许我的心情没有帮助)。

我正在尝试构建一个正则表达式来帮助我匹配两个网址:

/reservables/imagenes/4/editar/6
/reservables/imagenes/4/subir

如上所述,第一个网址6中的最后一个细分不会出现在第二个网址的末尾,因为此细分在此处是可选的。所以我需要在一个正则表达式中匹配两个网址,为此,我尝试过这个:

reservables/(editar|imagenes)/([0-9]+)/(imagen|editar|actualizar|subir)/([0-9]+)

仅适用于第一个网址。所以,阅读一些关于正则表达式的注释,它表明我需要?符号,对吗?所以,我尝试了这个,但它不起作用:

reservables/(editar|imagenes)/([0-9]+)/(imagen|editar|actualizar|subir)/([0-9]+)?

好吧,我不是我做错了。

2 个答案:

答案 0 :(得分:2)

您也希望将?放在/周围,如下所示:

reservables/(editar|imagenes)/([0-9]+)/(imagen|editar|actualizar|subir)(?:/([0-9]+))?

您可以在debuggex上看到它正确匹配。

答案 1 :(得分:1)

这个会起作用:

reservables/(editar|imagenes)/([0-9]+)/(imagen|editar|actualizar|subir)/([0-9]*)