为什么。*(?!集成)测试匹配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
你的正则表达式是断言“测试”是不是“整合”,这当然是永远是真的。
答
.*(?!Integration)Test
这涉及.*
吃了整个字符串,然后回溯匹配Test
。对于〔实施例,如果测试字符串是Integration test
.*
吃掉整个字符串,然后适用的经过作为Test
后没有integration
的looahead。 一旦.*
回溯匹配t
从Test
它再次应用向前看,但失败,所以继续和匹配测试以类似的方式应用在每一步的前瞻。
太棒了。而现在我明白负面展望/背后的差异足以说这篇文章的答案有点尴尬。我认为你的解决方案更直接。 – 2015-01-26 19:48:15