Regex 匹配特定URL,但不包括php文件

Regex 匹配特定URL,但不包括php文件,regex,nginx,Regex,Nginx,我有以下示例URL /alfa/wp包括/js/jquery/jquery.js /beta/wp content/plugins/app/js/media.js?参数=值 /beta/wp管理员/网络 /beta/wp content/themes/journal/data.php 我使用下面的正则表达式来匹配所有路径,不包括参数 ^/(alfa|beta)((/wp-(content|admin|includes))([^?\s]*)).* 这很好,但是如何更改正则表达式以排除任何包含.p

我有以下示例URL

/alfa/wp包括/js/jquery/jquery.js
/beta/wp content/plugins/app/js/media.js?参数=值
/beta/wp管理员/网络
/beta/wp content/themes/journal/data.php

我使用下面的正则表达式来匹配所有路径,不包括参数

^/(alfa|beta)((/wp-(content|admin|includes))([^?\s]*)).*

这很好,但是如何更改正则表达式以排除任何包含.php的路径呢?因此,它需要返回前3条路径,而不是最后一条路径。

我寻找的解决方案如下,谢谢@chris85

.*\.php(*SKIP)(*FAIL)|^/(alfa|beta)((/wp-(content|admin|includes))([^?\s]*)).*

您可以使用PCRE动词
skip
fail
跳过表达式的匹配。你可以在这里阅读更多关于他们的信息。对于当前示例,您可以使用:

.*\.php$(*SKIP)(*FAIL)|^/(alfa|beta)((/wp-(content|admin|includes))([^?\s]*)).*
这将跳过以
.php
结尾的文件

演示:


*\.php$
查找任何内容,直到字符串/行末尾出现一个
.php

@Wiktor你有一个好的副本吗?@mickmackusa Perhap,但我认为太宽了。是的。有太多不同的正确方法来解决这个问题@JoeS请付出更多努力,并让我们知道您的进展情况。@Wiktor我不确定您为什么将其标记为php,因为我正在Nginx重写中使用它,所以您的链接毫无用处。@JoeS我已将我的评论移到了答案中。请接受,如果这能为你解释的话。