正则表达式包括字符串的一部分但排除字符串的另一部分

时间:2014-02-21 12:57:13

标签: regex regex-negation regex-lookarounds

我试图了解有人如何攻击我客户的网站。我正在使用^(?!.*404).*194\.226.*$搜索日志文件,尝试在日志文件中找到一行,其中IP地址以194.226开头的人正在访问未导致404的服务器。

日志文件中的典型行是194.226.xx.xx - - [18/Feb/2014:01:45:10 +0100] "GET /tikiwiki/tiki-graph_formula.php?w=1&h=1&s=1&min=1&max=2&f[]=x.tan.phpinfo()&t=png&title=http://www.google.com/humans.txt? HTTP/1.0" 404 84403 "-" "-" 163 84852

我假设线路末端附近的404是404,因为它跟随HTTP / 1.0响应而未找到。

重要的是194.226 IS在线,但404不在线。从这里的研究RegExp Look for part but exclude If,我想出了上述内容。它要么不工作,要么找不到。我无法知道哪一个,因为日志文件大小为2188MB。

我的问题:正则表达式是否正确?

3 个答案:

答案 0 :(得分:1)

是的,正则表达式是正确的,只要您可以确定,404不是IP地址的一部分

答案 1 :(得分:1)

使用此正则表达式:

(?!.*404).*\b194\.226\b.*

此外,您需要使用多行标记,以便与所有这些标记相匹配。

答案 2 :(得分:1)

我认为这应该有助于你移动

^194\.226\.((?!404).)*$

演示:http://regex101.com/r/eM5bR8