Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式提取堆栈跟踪中的特定信息_Regex - Fatal编程技术网

Regex 使用正则表达式提取堆栈跟踪中的特定信息

Regex 使用正则表达式提取堆栈跟踪中的特定信息,regex,Regex,我在什么时候遇到了问题?您可以通过单击链接查看问题。在android开发应用程序中,需要使用正则表达式从特定堆栈跟踪中提取方法名、文件名和行号 我使用以下正则表达式来解决此问题: at widget.List.([a-zA-Z]+).([A-Za-z]+\.java).(\d{3,4}). 表达式可以解决这个问题,但我认为它不是正确的正则表达式,因为其中没有hat^和dollar$。点和方括号是正则表达式中的特殊字符,因此应该转义: Pattern pattern = Pattern.comp

我在什么时候遇到了问题?您可以通过单击链接查看问题。在android开发应用程序中,需要使用正则表达式从特定堆栈跟踪中提取方法名、文件名和行号

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

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

表达式可以解决这个问题,但我认为它不是正确的正则表达式,因为其中没有hat^和dollar$。

点和方括号是正则表达式中的特殊字符,因此应该转义:

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

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

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

您不应该使用widget.List。在您的正则表达式中,正如您在上面的一条注释中所写,因为这将只匹配widget.List包中的类。

字符串的开头是美元,字符串的结尾是美元,为什么需要em?那么,这不是字符串吗?我猜是这样的……换句话说,若你们在正则表达式模式之前加上帽子,它只会在字符串的开头开始搜索,所以^[d+]$会找到字符串1234,但会跳过a123,或者123boh,谢谢Sergio。我通过使用帽子和美元找到了另一种方法,在上面的场景中应用的正则表达式是:^.*\s+at-widget\.List\.\w+\w+\.java\:\d+$