我正在尝试创建一个正则表达式来匹配在 tomcat 服务器上发出请求的所有用户名。日志中的行示例:
192.10.123.45 - 域/用户名 [30/Jul/2012:07:29:13 -0400] "GET /APP/ HTTP/1.1" 200 53167
问题是用户名有几种不同的格式:
- 用户名
- 域\用户名
- 域/用户名
目前的尝试:
if(($line -match “GET”) -AND ($line -match "(\s-\s\w{1,})")) {
$temp = $matches[0]
if(($line -match “GET”) -AND ($line -match "(\s-\s\w{1,}\S)?=[\\\/](w{1,}\b)")) {
$temp1 = $matches[0]
Write-host $temp
}
我在用户名之前使用空格作为起点,这似乎工作正常。我总是检查该行中是否包含“GET”,因为它是我们目前唯一关心的 PHP 调用。我有 2 个匹配项,因为第一个匹配项总是只匹配一个单词,如果第二个匹配项匹配,我将使用 $temp 修剪 $temp1,因为我们不关心域。我真正遇到的麻烦是如何用正则表达式说“反斜杠或正斜杠”。
另外,我不确定我的正则表达式是否处理用户名将有数字或域将有破折号的情况。我假设这是由 \w 拾取的,但我在开发中找不到任何我正在测试的案例。
对于我对正则表达式缺乏了解,我提前道歉。