解决以下问题: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+)\)
我会让它更通用一点,即
/at ([\w.]+)\(([^:]+):(\d+))
内存捕获是:
我用了
.*\..*\.(\w+)\((\w+\.\w+):(\d+)\)
我参加聚会有点晚了,但是使用这种模式可以让您单击继续:
([\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 接受的一种方式