我有这个正则表达式模式
<(\d+)>(\d+\.\d+|\d{4}\-\d+\-\d+\s+\d{2}:\d{2}:\d{2})(?:\..*?)*\s+(ALER|NOTI)
Run Code Online (Sandbox Code Playgroud)
这是我的输入(根本不匹配)
<150>2010-12-29 18:11:30.883 -0700 192.168.2.145 80 192.168.2.87 2795 "-" "-" GET HTTP 192.168.2.145 HTTP/1.1 200 36200 0 1038 544 192.168.2.221 80 540 SERVER DEFAULT PASSIVE VALID /joomla/ "-" http://192.168.2.145/joomla/index.php?option=com_content&view=a be4d44e8f3986183a87991398c1c212e=1; be4d44e8f3986183a87991398c1c212e=1
Run Code Online (Sandbox Code Playgroud)
这将返回不匹配的结果,但输出结果需要很长时间.由于我在一秒钟内有一千个日志/输入,因此每个日志/输入都应该非常快.有时它达到CPU 100%.
任何人都可以帮我解决这个正则表达式的问题吗?
谢谢
由于表达式(?:\..*?)*可以匹配的方式很多,因此您会发生灾难性的回溯.可能必须检查数百万个匹配项,并随着字符串中的点数呈指数增长.要解决它,你可以改变这个:
(?:\..*?)*\s+
Run Code Online (Sandbox Code Playgroud)
对此:
\..*\s
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
912 次 |
| 最近记录: |