2

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

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

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

4

5 回答 5

1

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

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

因此,(\(.*?\))最终将得到可通过 \1 访问的 '(ListView.java:1727)'。

如果您想在括号内匹配,但不将括号本身捕获为捕获的一部分,您可以这样做 \((.*?)\):现在 \1 将是 'ListView.java:1727'。

如果你想在括号内得到个别的东西,你可以做类似\((.*?):(.*?)\). 这将使\1 成为'ListView.java' 而\2 成为'1727'。

这有帮助吗?

于 2013-01-13T21:38:04.617 回答
0

如果我只是给你一个有效的正则表达式,不确定你是否真的会学到任何东西,但是你去:

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

或者更简单一点:

at \w+\.\w+\.(\w+)\((\w+\.\w+):(\d+)\)
于 2013-01-12T20:29:26.350 回答
0

我会让它更通用一点,即

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

内存捕获是:

  1. 班上
  2. 文件名
  3. 行号
于 2013-07-08T12:08:33.390 回答
0

我用了

.*\..*\.(\w+)\((\w+\.\w+):(\d+)\)
于 2013-07-08T10:04:31.307 回答
0

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

([\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 接受的一种方式

于 2015-06-24T10:28:20.013 回答