2015-01-26 6 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

Awesome. И теперь я понимаю разницу между негативным взглядом вперед/назад, чтобы сказать, что ответ из этой статьи немного неудобен. Я думаю, что ваше решение более прямолинейно. –

0
.*(?!Integration)Test 

Это предполагает .* съедает всю строку, а затем отступает, чтобы соответствовать Test .FOR exmaple если тест строка Integration test.* съедает всю строку, а затем применяет looahead, который проходит, как после Test нет integration. Как только .* обратные следы в соответствии с t от Test, он снова применяет lookahead, но не работает, поэтому продолжается и сравнивается. Тест аналогичным образом применяет взгляд на каждом шаге.

enter image description here

+0

Одна небольшая ошибка в вашем ответе: взгляд не ищет «Интеграция» __after__ «Тест», он ищет «Интеграцию» прямо там, в начале «Тестирования». –

+0

why downvoted ?????????????/ – vks

+0

Использование жадного квантификатора '. *' Здесь не имеет отношения к проблеме. Ваш ответ не отвечает на заданный вопрос. – Bohemian