Regex 用于在HTTP标头中搜索特定引用的正则表达式
我需要创建一个正则表达式来匹配除了给定引用的特定URL之外的所有内容。我目前有它匹配,但不能扭转它,并为它创造负面 我目前拥有的:Regex 用于在HTTP标头中搜索特定引用的正则表达式,regex,Regex,我需要创建一个正则表达式来匹配除了给定引用的特定URL之外的所有内容。我目前有它匹配,但不能扭转它,并为它创造负面 我目前拥有的: Referer:(http(s)?(:\/\/))?(www\.)?test.com(\/.*)? 在以下列表中: Referer:http://www.test.online/ Referer:https://www.test.online/ Referer:https://www.test.tv/ Referer:https://www.blah.com/ R
Referer:(http(s)?(:\/\/))?(www\.)?test.com(\/.*)?
在以下列表中:
Referer:http://www.test.online/
Referer:https://www.test.online/
Referer:https://www.test.tv/
Referer:https://www.blah.com/
Referer:https://www.test.com/
Referer:http://www.test.com/
Referer:http://test.com/
Referer:https://test.com/
它将匹配:
Referer:https://www.test.com/
Referer:http://www.test.com/
Referer:http://test.com/
Referer:https://test.com/
然而,我希望它能匹配所有的东西,除了那些
这是针对我们的WAF的,因此很遗憾,WAF的使用受到限制,只能通过搜索返回的HTTP头来实现。尝试以下正则表达式:
^(?!.*Referer:(http(s)?(:\/\/))?(www\.)?test.com(\/.*)?).*$
否定正则表达式的一个好方法是使用负前瞻
说明:
负先行结构是一对括号,左括号后跟问号和感叹号。在lookahead中[是任何正则表达式模式]
工作示例:您可以使用锚点
^
来断言字符串的开头,并使用负向前看来断言右侧的内容不是您想要匹配的内容
请注意,您必须转义圆点以逐字匹配它,并且可以省略最后一部分(\/.*)
如果以后不使用捕获组,您也可以将它们转换为非捕获组(?:)
^(?!Referer:(https?(:\/\/))?(www\.)?test\.com).+$
关于图案
字符串的开头^
断言右侧内容的负前瞻性不匹配(?!
匹配您的模式Referer:(https?(:\/\/)?(www\)?test\.com
关闭反向前瞻)
将除换行符以外的任何字符匹配1次以上+
断言字符串的结尾$
^(?!Referer:(https?(:\/\/)?(www\)?test\.com)。+//code>谢谢@Thefourthbird-这非常有效。就是找不到合适的地方放这个@阿德纳艾哈迈德,不客气。我加上它作为一个答案。