Regex 用于在HTTP标头中搜索特定引用的正则表达式

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

我需要创建一个正则表达式来匹配除了给定引用的特定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/
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次以上
  • $
    断言字符串的结尾

请将您正在使用的编程语言添加到Tagsry中,并使用负前瞻
^(?!Referer:(https?(:\/\/)?(www\)?test\.com)。+//code>谢谢@Thefourthbird-这非常有效。就是找不到合适的地方放这个@阿德纳艾哈迈德,不客气。我加上它作为一个答案。