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

问题描述:

我想写一个正则表达式来运行所有的单元测试,但不运行集成测试。单元测试被命名为FooTest,集成测试被命名为BarIntegrationTest,其中“Foo”和“Bar”是变量。 I found this article on how to do it and I have solved my problem。但是,它的解决方案是使用这个表达式:为什么。*(?!集成)测试匹配FooIntegrationTest?

(.(?!Integration))*Test 

我不明白为什么这个表达式是不够的:

.*(?!Integration)Test 

当我试过了第二正则表达式,我的集成测试仍然运行。

您使用的是负看看提前,但你要负看背后

.*(?<!Integration)Test 

你的正则表达式是断言“测试”是不是“整合”,这当然是永远是真的。

+0

太棒了。而现在我明白负面展望/背后的差异足以说这篇文章的答案有点尴尬。我认为你的解决方案更直接。 – 2015-01-26 19:48:15

.*(?!Integration)Test 

这涉及.*吃了整个字符串,然后回溯匹配Test。对于〔实施例,如果测试字符串是Integration test.*吃掉整个字符串,然后适用的经过作为Test后没有integration的looahead。 一旦.*回溯匹配tTest它再次应用向前看,但失败,所以继续和匹配测试以类似的方式应用在每一步的前瞻。

enter image description here

+0

你的回答中有一个小错误:前瞻并不寻找'Integration' __after__'Test',它在'Test'的开头就在那里寻找'Integration'。 – 2015-01-26 19:46:04

+0

为什么downvoted ?????????????/ – vks 2015-01-26 19:46:14

+0

贪婪量词'。*'的使用与这里的问题无关。你的回答并不回答被问到的问题。 – Bohemian 2015-01-26 19:46:41