RE2/Perl RegEx, выбор всех строк без нескольких слов

У меня возникли трудности с тем, что отрицательный просмотр вперед недоступен RE2. С обычным регулярным выражением я бы сделал что-то вроде этого:

^(?!text|someText|.*cont).*

Чтобы исключить строки, начинающиеся с «text», «someText» и содержащие «cont». К сожалению, негативный прогноз недоступен в RE2.

Как мы можем решить эту проблему?


person user2693017    schedule 08.04.2019    source источник


Ответы (1)


Вы можете обрабатывать отрицательные условия просмотра вперед, используя положительное совпадение, а затем ожидая отрицания этого. Например:

$input = "text is good";
if ($input !~ m/^(text|someText).*$/ && $input !~ m/^.*cont.*$/) {
    print "MATCH";
}
else {
    print "NO MATCH";
}
person Tim Biegeleisen    schedule 08.04.2019
comment
К сожалению, это нужно сделать с помощью одной строки регулярного выражения, возможно ли это? - person user2693017; 08.04.2019
comment
Да, это возможно, но я думаю, что шаблон может выглядеть очень уродливым, даже уродливым. Что не так с моим предложением? - person Tim Biegeleisen; 08.04.2019
comment
Он используется как параметр конфигурации :( - person user2693017; 08.04.2019