繁体   English   中英

使用正则表达式从日志文件中提取信息

[英]Extracting information from a log file using a regex

解决以下问题: http : //regexone.com/example/6

我发现自己无法使用正则表达式捕获第一个括号。 到目前为止,这是我的正则表达式: at (\\w+).(\\w+)\\.(\\w+)

这是我的正则表达式应处理的示例行: at widget.List.makeView(ListView.java:1727)

要捕获某些括号之间的所有内容,请包括括号:

(\\(.*?\\)) 例如,这会将'(ListView.java:1727)'放置在捕获组1中,您可以根据正则表达式的风格将其引用为\\1

因此, (\\(.*?\\))将以可通过\\ 1访问的'(ListView.java:1727)'结尾。

如果要在括号内进行匹配,但不希望将括号本身作为捕获的一部分捕获,则可以执行: \\((.*?)\\) 现在\\ 1为'ListView.java:1727'。

如果要在括号中包含单个内容,可以执行\\((.*?):(.*?)\\) 这将使\\ 1为'ListView.java'和\\ 2为'1727'。

有帮助吗?

如果我只给您一个正常的正则表达式,就不确定您是否真的会学到什么,但是这里您可以:

at [^\.]+\.[^\.]+\.([^\.]+)\((.+):(\d+)\)

或更简单一些:

at \w+\.\w+\.(\w+)\((\w+\.\w+):(\d+)\)

我用了

.*\..*\.(\w+)\((\w+\.\w+):(\d+)\)

我将使其更加通用,即

/at ([\w.]+)\(([^:]+):(\d+))

内存捕获为:

  1. 班级
  2. 档案名称
  3. 行号

我参加聚会有点晚了,但是使用此模式,您可以单击继续:

([\w]+).([\w]+\.[\w]+):([\d]+)

(        //First group
[\w]     //Match a single character
+        //Between 1 and x times
)        //End of first group
.        //any character (\W works too, \( unfortunately not)
(        //2nd Capturing group ([\w]+\.[\w]+)
[\w]     //Match a single character
+        //Between 1 and x times
\.       //The literal . char
[\w]     //Match a single character
+        //Between 1 and x times
)        //end of 2nd group
:        // Match colon char
(        //Start of 3rd group
[\d]     //Match any digits
+        // one or more times
)        //End of third group

可能会有更清洁的选项,但这是regexone.com接受的一种方式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM