正则表达式在日志文件中查找字符串并将字符串分成几部分

时间:2013-03-20 08:25:02

标签: php regex whitespace

我对正则表达式很新,但我已经完成了足够多的研究。不幸的是我遇到了障碍。我将使用这个正则表达式与PHP preg_match来解析一些服务器日志并返回特定字符串,如“我的字符串”中的示例。

My Regex:

\b([0-9\:]+)\s\"ANTIHAKE\sFOUND:\s+(.*?)\s\(([^)]+)\)\s+REASON:\s+(.*?)\s+\(([^)]+)\)"  

我的字符串:

15:34:51 "ANTIHAKE FOUND:  Kevin (106534790)  REASON:  Global Var  (Monky_hax_toggled)"

最终我的目标是提取总共5个变量:
时间 - “15:34:51”
姓名 - “凯文”
UID - “106534790”
理由 - “全球变种”
具体原因 - “Monky_hax_toggled”

我遇到的一个具体问题是抓住原因。我似乎无法弄清楚如何捕获“全局变量”作为一个字符串,包括空格。有人会帮助我吗?

谢谢!
乔恩

2 个答案:

答案 0 :(得分:0)

试试这个:

([0-9]{2}:[0-9]{2}:[0-9]{2})\s+"ANTIHAKE FOUND:\s+([^(]+)\s+\(([0-9]+)\)\s+REASON:\s+([^(]+)\s+\(([^)]+)\)"

请记住,regexp是根据您的示例量身定制的。

答案 1 :(得分:0)

只需删除(。*?)之后的\ s +就好了 - :

\b([0-9\:]+)\s\"ANTIHAKE\sFOUND:\s+(.*?)\s\(([^)]+)\)\s+REASON:\s+(.*?)\(([^)]+)\)