无法创建完全正确的正则表达式

2024-10-02 08:15:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下正则表达式(已更新): ([0-9]{2}/[a-zA-Z]{3}/[0-9]{4})(.+)(GET|POST)\s(http://|https://)([a-zA-Z-.][a-zA-Z0-9+\.[a-zA-Z0-9-.]+)(\.)([a-zA-Z0-9]+)([\.:/\s]).+?"\s200

我还从一个长的服务器日志(更新)中摘录了以下几行内容:

218.5.192.147 - - [14/Mar/2004:02:31:06 -0500] "GET http://searchanytime.com" 200 - "-" "-"
202.101.150.100 - - [12/Mar/2004:21:18:55 -0500] "GET http://nationalwholesalellc.com" 200 114887 "-" "-"

这些线路按计划运行:

220.173.17.142 - - [09/Mar/2004:23:32:13 -0500] "POST http://www.canada44.ca/ HTTP/1.1" 200 27095 "http://www.so123.com" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)"
212.160.136.163 - - [10/Mar/2004:01:01:46 -0500] "GET http://www.6seconds.org/ HTTP/1.0" 200 51937 "http://www.helavasearch.com/cgi-bin/search.cgi?username=amundii&keywords=parenting" "Mozilla/4.0 (compatible; MSIE 4.0; Windows 98)"
218.72.85.59 - - [10/Mar/2004:01:05:13 -0500] "GET http://hpcgi1.nifty.com/trino/ProxyJ/prxjdg.cgi HTTP/1.1" 200 2221 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"

几乎在任何情况下,group7都是我的顶级域名(com、cn、org等)。但是,对于包含.com“而不是.comhttp/1.1”的行,它不起作用,并将组7返回为“searchanytime”而不是“com”

我一直在用www.regexr.com你知道吗


Tags: comhttpmozillagetwindowswwwpostmar
1条回答
网友
1楼 · 发布于 2024-10-02 08:15:10

正则表达式

从我所看到的你试图做的事情来看,我得出了以下结论:

(\d{2}/\w{3}/\d{4})(.+)(GET|POST)\s(http://|https://)(\w+)?\.?([\w\d]+)\.(\w+).*?200

崩溃

我会分解正则表达式,这样如果它不是100%你正在寻找的,希望它会把你的方式

组1

(\d{2}/\w{3}/\d{4})

捕获日志条目上的日期,格式为DD/MMM/YYYY

第2组

(.+)

捕获此组和下一组之间的填充。在第一个示例中,这将匹配:02:31:06 -0500] "注意:如果POSTGET

第3组

(GET|POST)

很自嘲

填料

\s

匹配一个我们不关心的空白字符

第4组

(http://|https://)

也很直截了当

第5组

我想这就是你的正则表达式崩溃的地方。你知道吗

(\w+)?\.?

这将匹配日志条目的www或hpcgi1部分。注意到了吗?使此组成为可选的角色。这适用于以下情况:

[14/Mar/2004:02:31:06 -0500] "GET http://searchanytime.com" 200 - "-" "-"

第6组

([\w\d]+)

中间部分(即canada44,nifty)或第一部分(即searchanytime)

第7组

([\w\d]+)

结束部分(即com,org)

填料

.*?

“com”、“org”等和200之间的任何字符(尽可能少)。如果你想引用其中任何一个,你应该捕获它。你知道吗

结束

200

匹配200。注意,是因为?在上面的填充符中,这将是第7组之后的第一次200场比赛

免责声明

实际上,我还没有在您的日志消息上测试这个正则表达式。 我不确定你想要/需要什么样的分组,但希望这能有点帮助。你知道吗

相关问题 更多 >

    热门问题