1

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

我使用以下正则表达式来解决问题:

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

该表达式适用于该问题,但我认为它不是正确的正则表达式,因为其中不包含帽子(^)和美元($)。

4

2 回答 2

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
于 2013-03-05T11:48:02.417 回答
0

这是可用于解决此示例的正则表达式:

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

你不应该使用widget.List。在您的正则表达式中(正如您在上面的评论之一中所写),因为这将仅匹配 widget.List 包中的类。

于 2013-03-05T12:21:47.380 回答