简单的正则表达式匹配网站日志中的内容

时间:2017-09-26 09:52:19

标签: regex

拥有以下行的日志,我想获得以下三个捕获组,标记为粗体:

  

“mywebsite.com:80 1.1.1.1 u311 - - [26 / Sep / 2017:11:28:26 +0200]   “GET / website& format = json HTTP / 1.1”200 2820 1s   https://mywebsite.com/index.php“Mozilla / 5.0(Windows NT 6.1; Win64;   x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 60.0.3112.113   Safari / 537.36“ 1/1194130

这是:

  • u311 :这是用户ID。始终以u开头并且长度不同(u32u412u9),因此正则表达式应匹配,直到下一个空格。
  • 1s :这是网站的加载时间。它始终是一个整数,后跟s
  • https://mywebsite.com/index.php :网站网址,可以匹配,因为它的开头有https://

我有点失落,因为我没有那么多使用正则表达式。我使用^[u][0-9]尝试了第一个没有运气,因为它只匹配以u开头的字符串后跟一个数字。

如果有人想直接尝试,可以使用正则表达式:https://regex101.com/r/so66ku/1

有人可以告诉我如何匹配这三个捕获组?

2 个答案:

答案 0 :(得分:2)

由于我不知道你正在使用的正则表达式,这个解决方案可能不起作用,但很可能它会:

(\bu\d+).*?(\b\d+s\b).*?"(https?:\/\/[^"]*)"

将三个子匹配捕获到不同的子组中。

此正则表达式使用word boundary anchors来确保在查找u123123s时我们处于“单词”的开头/结尾。

我同时允许http://https://地址 - 如果您只想https://,请在?之后删除https

答案 1 :(得分:1)

你可以使用正则表达式

(?:u\d+|\d+s|https?:\/\/[a-z.\/]+)

请参阅regex101 demo