2013-03-05 113 views
1

我在http://regexone.com/example/6处遇到问题?您可以通过点击链接查看问题。需要一个正则表达式来从android开发应用程序中的特定堆栈跟踪中提取方法名称,文件名和行号。使用正则表达式提取堆栈跟踪中的特定信息

我用下面的正则表达式来解决这个问题:

at widget.List.([a-zA-Z]+).([A-Za-z]+\.java).(\d{3,4}). 

表达作品的问题,但我不认为它正确的正则表达式,因为没有帽子(^)和美元( $)包含在其中。

+0

帽子开始的字符串美元是字符串的结尾,为什么你需要EM? – Sergio 2013-03-05 11:42:42

+0

所以,这不是一个字符串?我猜这是... – codeLearner 2013-03-05 11:44:15

+0

好吧,换句话说,如果你把帽子放在你的正则表达式模式之前,它将只在字符串开始处开始搜索,所以^ [d +] $将找到字符串1234,但会跳过a123或123b – Sergio 2013-03-05 11:48:58

回答

0

点和括号正则表达式中一个特殊字符,因此应该被转义:

Pattern pattern = Pattern.compile ("at widget\\.List\\.(\\w+)\\((\\w+\\.java):(\\d+)\\)"); 
Matcher m = pattern.matcher ("...at widget.List.makeView(ListView.java:1727)..."); 
m.find(); 
System.out.println ("Method name: " + m.group (1)); 
System.out.println ("File name: " + m.group (2)); 
System.out.println ("Line number: " + m.group (3)); 

对我来说,输出是:

Method name: makeView 
File name: ListView.java 
Line number: 1727 
0

这里是一个可以用来解决这个问题的正则表达式例如:

^.*\s+at\s+.*\.(\w+)[(](\w+\.\w+)\:(\d+).*$ 

您不应该使用widget.List。在你的正则表达式中(正如你在上面的一个注释中所写的那样),因为这只会匹配widget.List包中的类。

相关问题