2015-01-26 101 views
3

我想寫一個正則表達式來運行所有的單元測試,但不運行集成測試。單元測試被命名爲FooTest,集成測試被命名爲BarIntegrationTest,其中「Foo」和「Bar」是變量。 I found this article on how to do it and I have solved my problem。但是,它的解決方案是使用這個表達式:爲什麼。*(?!集成)測試匹配FooIntegrationTest?

(.(?!Integration))*Test 

我不明白爲什麼這個表達式是不夠的:

.*(?!Integration)Test 

當我試過了第二正則表達式,我的集成測試仍然運行。

回答

6

您使用的是負看看提前,但你要負看背後

.*(?<!Integration)Test 

你的正則表達式是斷言「測試」是不是「整合」,這當然是永遠是真的。

+0

太棒了。而現在我明白負面展望/背後的差異足以說這篇文章的答案有點尷尬。我認爲你的解決方案更直接。 – 2015-01-26 19:48:15

0
.*(?!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