我想创建一个正则表达式来匹配在tomcat服务器上发出请求的所有用户名。线的从日志中的样品:Powershell正则表达式匹配域用户名
192.10.123.45 - 域/用户名[30 /月/ 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调用。我有两场比赛,因为第一场比赛总是只匹配一个单词,如果第二场比赛是比赛,我会使用$ temp修剪$ temp1,因为我们不关心域。我真正遇到的问题是如何用正则表达式来说“反斜杠或前向拉伸”。
此外,我不知道我的正则表达式处理的情况下,用户名将有数字或域将有破折号。我假设这是\ w \,但我无法找到任何这些情况下在我正在测试的开发中。
我很抱歉提前因为我缺乏正则表达式的知识。
嘿尼克,感谢您的帮助,这几乎解决了我所有的问题。我不打算采用第一种解决方案,我没有对它进行测试,因为我想使用正则表达式,我觉得它对这些类型的东西更加有用和准确。第一条if语句正确地处理用户名或域\用户名,第二条if语句仅从域名解析出域名/用户名的域名。这仍然使案例域\用户名未处理。我认为它可能只是你的一个错字,你在if语句中有一个反斜杠,在分裂中有两个反斜杠。你可以解释这个 – Cole9350 2012-08-10 14:10:29
第二个if语句检查反斜线或正斜杠。我测试了所有三个,他们没有问题。正则表达式中的a | b表示a或b。两个\的原因是为了逃避它。 /不需要转义。 – Nick 2012-08-10 19:35:21
对,我用你的确切的代码,它没有工作,从来没有少我拿你显示的| (或),并使我的代码工作,所以谢谢。但是我对正则表达式有足够的了解,以了解你的写作。所以我的问题是。为什么在if语句中你有两个正斜杠,并且你不在背斜线中使用转义符?这是我的第二条if语句,类似于你的,但我的作品'if(($ line -match“GET”)-AND($ line -match“\ s [ - ] {1} \ s \ w {1,} ((\\ | /)\ w {1,} \ b)“)){$ temp = $ matches [1]; $ temp = $ temp.TrimStart(“\\ |//”); }' – Cole9350 2012-08-10 20:09:38