<h2>说明</h2>
<pre><code>^.*?(\[Error\]).*?\.((?:[a-z]+\.){2}[a-z]+\(\))
</code></pre>
<p><img src="https://www.debuggex.com/i/OUNApIwUverKBzwM.png" alt="Regular expression visualization"/></p>
<p>此正则表达式将执行以下操作:</p>
<ul>
<li>使用<code>[error]</code>查找所有行</li>
<li>捕获方法名,它是<code>()</code>前面的三个文本块</li>
</ul>
<h2>示例</h2>
<p><strong>现场示例</strong></p>
<p><a href="https://regex101.com/r/kI4cL2/1" rel="nofollow">https://regex101.com/r/kI4cL2/1</a></p>
<p><strong>示例文本</strong></p>
^{pr2}$
<p><strong>样本匹配</strong></p>
<pre><code>[0][0] = 21:18:26 2016-05-12 21:18:25.238 [ERROR] (1): Failed to find the annotation and the status of the test public void com.somename.qa.mobile.tests.alpha.SomeTest.testSomeName()
[0][1] = [ERROR]
[0][2] = alpha.SomeTest.testSomeName()
[1][0] = 21:18:26 2016-05-12 21:18:25.238 [ERROR] (1): Failed to find the annotation and the status of the test public void com.somename.qa.mobile.tests.bravo.SomeTest.testSomeName()
[1][1] = [ERROR]
[1][2] = bravo.SomeTest.testSomeName()
[2][0] = 21:18:26 2016-05-12 21:18:25.238 [ERROR] (1): Failed to find the annotation and the status of the test public void com.somename.qa.mobile.tests.charlie.SomeTest.testSomeName()
[2][1] = [ERROR]
[2][2] = charlie.SomeTest.testSomeName()
</code></pre>
<h2>解释</h2>
<pre><code>NODE EXPLANATION
^ the beginning of a "line"
.*? any character except \n (0 or more times
(matching the least amount possible))
( group and capture to \1:
\[ '['
Error 'Error'
\] ']'
) end of \1
.*? any character except \n (0 or more times
(matching the least amount possible))
\. '.'
( group and capture to \2:
(?: group, but do not capture (2 times):
[a-z]+ any character of: 'a' to 'z' (1 or
more times (matching the most amount
possible))
\. '.'
){2} end of grouping
[a-z]+ any character of: 'a' to 'z' (1 or more
times (matching the most amount
possible))
\( '('
\) ')'
) end of \2
</code></pre>