Я хочу, чтобы регулярное выражение соответствовало всем, кроме нескольких конкретных вариантов в более широком выражении.Против (foo | bar | baz)
Следующий пример будет соответствовать test_foo.pl или test_bar.pl или test_baz.pl:
/test_(foo|bar|baz)\.pl/
Но я хотел бы как раз наоборот:
match test_.*\.pl except for where .* = (foo|bar|baz)
Я отчасти ограничен в моих вариантах для этого, потому что это не напрямую в perl-программу, а аргумент cloc, a program that counts lines of code (that happens to be written in perl). Поэтому я ищу ответ, который можно сделать в одном регулярном выражении, а не в нескольких цепях.
бить меня по секундам. +1 –
Я думаю, что ваш soution отклонит 'test_bart.pl', но, как я понял, OP примет' test_bart.pl', но не 'test_bar.pl' (просто пример, отметив, что особый, связанный с' bart') – ArtM
Чтобы сделать это * только * исключить givens, вам нужно также совместить конец выражения: '/ test _ (?! (Foo | bar | baz) \. Pl). * \. Pl /'. (Эта версия также неверна, если строка содержит несколько имен файлов (из-за '. *'), Но это не должно быть в контексте вопроса.) – porges