Regex 为什么。*(?!集成)测试与FooIntegrationTest匹配?

Regex 为什么。*(?!集成)测试与FooIntegrationTest匹配?,regex,intellij-idea,negative-lookahead,Regex,Intellij Idea,Negative Lookahead,我试图编写一个正则表达式来运行所有单元测试,但不运行集成测试。单元测试命名为FooTest,集成测试命名为BarIntegrationTest,变量为“Foo”和“Bar”。但是,它的解决方案是使用这个正则表达式: (.(?!Integration))*Test 我不明白为什么这个正则表达式不够: .*(?!Integration)Test 当我尝试第二个正则表达式时,我的集成测试仍然在运行 您使用的是消极的前瞻,但您希望的是消极的后视: *(? 您的正则表达式断言“测试”不是“集成”,这当

我试图编写一个正则表达式来运行所有单元测试,但不运行集成测试。单元测试命名为
FooTest
,集成测试命名为
BarIntegrationTest
,变量为“Foo”和“Bar”。但是,它的解决方案是使用这个正则表达式:

(.(?!Integration))*Test
我不明白为什么这个正则表达式不够:

.*(?!Integration)Test

当我尝试第二个正则表达式时,我的集成测试仍然在运行

您使用的是消极的前瞻,但您希望的是消极的后视:

*(?
您的正则表达式断言“测试”不是“集成”,这当然总是正确的

.*(?!Integration)Test
这涉及到
*
吃掉整个字符串,然后回溯以匹配
测试
。对于exmaple,如果测试字符串是
集成测试
*
吃掉整个字符串,然后应用在
测试
之后通过的测试,则没有
集成
。 一旦
*
Test
回溯到匹配
t
,它将再次应用前瞻,但失败,因此继续并以类似的方式在每个步骤应用前瞻来匹配测试


你的回答中有一个小错误:在
测试之后,前瞻并不寻找
集成
,而是在
测试开始时寻找
集成
。贪婪量词
*
的使用与这里的问题无关。你的回答没有回答所问的问题。不是吗我投了倒数票,但这个答案中有太多的拼写错误,我对它没有信心。@Rawing no.前瞻性将首先在最后测试,然后当回溯发生时,它将再次测试。请参阅editAwesome。现在我理解了否定前瞻性/落后性之间的区别,足以说那篇文章的答案是l有点尴尬。我认为你的解决办法更直截了当。
.*(?!Integration)Test