Perl Регулярное выражение |Как прочитать строку из файла, используя - PullRequest
0 голосов
/ 22 апреля 2019

Я работаю над новым проектом, в котором используется регулярное выражение Perl, и я ищу способ извлечь текст из локального файла, используя шаблон Perl Regular из одной строки.

Я хочу обычныйвыражение должно быть в форме одной строки и примечание к кодировке, например:

         ^(?!.....(?:........)).*$

Я не хочу иметь "кодоподобную" форму, такую ​​как:

       use warnings;
       use strict;
       use feature qw(say);

       use Path::Tiny;
       my $file = shift // die "Usage: $0 file\n";  #/
       my @words = split ' ', path($file)->slurp;
       my $exclude = join '|', map { quotemeta } @words;
       foreach my $string (qw(a1testtre orangesh1 apleship3)) 
       { 
           ........
           ........ 
           }
        }

Моя конечная цель - поиск ( с помощью однострочного регулярного выражения Perl !! ) строк в текстовом файле, а затем проверка, является ли одна из них частью строки, которую я тестирую.Итак, я создал регулярное выражение Perl

  ->        ^(?!.*(?:banned)).*$

, которое проверяет, содержит ли тестируемая строка слово «banned» внутри нее.

См. Пример здесь: https://regex101.com/r/toQpCb/1

Теперь, если я смогу каким-либо образом заменить «запрещенный» мир содержимым локального файла (txt), который я хочу, я буду готов.Подходящим решением может быть что-то вроде:

    ^(?!.*(?:\someway_the_string_from_me_local_txt_file\)).*$

1 Ответ

1 голос
/ 22 апреля 2019

Вы хотите проверить, что каждая позиция не является началом одного из ваших слов, поэтому вы действительно хотите

^(?:(?!WORD1|WORD2|...).)*\z

, поэтому

my $good_re = qr/^(?:(?!$exclude).)*\z/s;

if ($string =~ $good_re) {
   # Good
} else {
   # Bad
}

Но вместо проверки, еслиСтрока «безопасна», более эффективно проверять ее безопасность (затем просто инвертировать результат).

my $bad_re = qr/$exclude/;

if ($string =~ $bad_re) {
   # Bad
} else {
   # Good
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...