正则表达式匹配url与postfix?

时间:2014-03-01 05:00:39

标签: regex django

所以我有一个有趣的正则表达式挑战。考虑以下[django url routing]正则表达式:

(/(?P<required_part>[a-zA-Z0-9\-]+))(/(?P<optional_part>[a-zA-Z0-9\-]+))?/postfix

我有第二个URL如下(注意缺少后缀):

(/(?P<required_part>[a-zA-Z0-9\-]+))(/(?P<optional_part>[a-zA-Z0-9\-]+))?

用语言来说,我有一个必需的部分,后跟一个可选部分,然后是一个后缀,它也被可选部分匹配。我想要所有的URL都以postfix与第一个匹配,而所有不匹配的第二个匹配。问题是在所有情况下,后缀都被可选部分捕获,第二个模式匹配。

我该如何处理?如果解决方案在将其注入数据库时​​未引入数据库注入漏洞,则可获得奖励积分。

1 个答案:

答案 0 :(得分:2)

您可以通过在末尾添加$来限制第二个正则表达式的范围,从而使第二个正则表达式只匹配其路径中有两个目录的URL,或者您可以向其添加负向前导第二个正则表达式的结尾,仅搜索没有postfix作为第三个目录的URL:

^(/(?P<required_part>[a-zA-Z0-9\-]+))(/(?P<optional_part>[a-zA-Z0-9\-]+))?(?!/postfix)

我还建议在正则表达式的开头添加^。如果没有它,上面的正则表达式可以回溯并匹配/foo/bar/postfix/baz

相关问题