我有以下示例网址
/alfa/wp-includes/js/jquery/jquery.js
/beta/wp-content/plugins/app/js/media.js?parameter=value
/beta/wp-admin/network
/beta/wp-content/themes/journal/data.php
我正在使用以下正则表达式来匹配所有路径,不包括参数
^/(alfa|beta)((/wp-(content|admin|includes))([^?\s]*)).*
这很好用,但如何更改正则表达式以排除任何包含.php的路径?所以它需要返回前3个路径而不是最后路径。
答案 0 :(得分:0)
我寻找的解决方案如下,谢谢@ chris85
.*\.php(*SKIP)(*FAIL)|^/(alfa|beta)((/wp-(content|admin|includes))([^?\s]*)).*
答案 1 :(得分:0)
您可以使用PCRE动词skip
和fail
来跳过表达式的匹配。您可以在此处详细了解它们,http://www.rexegg.com/backtracking-control-verbs.html#skipfail。对于您当前的示例,您可以使用:
.*\.php$(*SKIP)(*FAIL)|^/(alfa|beta)((/wp-(content|admin|includes))([^?\s]*)).*
会跳过以.php
结尾的文件。
演示:https://regex101.com/r/YH3n0x/1/
.*\.php$
会查找任何内容,直到字符串/行末尾的.php
为止。