Как я могу написать длинное регулярное выражение, чтобы оно помещалось на экране?
У меня есть совпадение регулярных выражений в Perl. Соответствующее предложение, которое занимает более одной строки.
Я понимаю, что я должен вводить регулярное выражение совпадения только в одну строку, если я растягиваюсь на несколько строк, это дает сбой:
$array_11 =~ m{By Steve (.*), MarketWatch LONDON (.*) -- Shares of Anglo American rallied on Monday morning as (.*) bet that the mining group will reject a (.*)};'
Если я напишу его в несколько строк, он не сможет соответствовать этой строке.
3 ответа
Как упоминалось ранее, похоже, что вы ищете модификатор x. Этот модификатор игнорирует все пробелы в регулярном выражении и разрешает комментарии (начиная с #).
В вашем случае это немного уродливо, потому что вам нужно заменить все пробелы, которые вы хотите найти в регулярном выражении, на [ ], \s или \s+:
$array_11 =~ m{By \s+ Steve \s+ (.*), \s+
MarketWatch \s+ LONDON \s+ (.*) \s+
-- \s+ Shares \s+ of \s+ Anglo \s+ American \s+
rallied \s+ on \s+ Monday \s+ morning \s+ as \s+
(.*) \s+ bet \s+ that \s+ the \s+ mining \s+
group \s+ will \w+ reject \w+ a \w+(.*)
}x;
Так что на самом деле я бы написал что-то вроде этого:
my $sentence= q{By Steve (.*), MarketWatch LONDON (.*) }
. q{-- Shares of Anglo American rallied on Monday morning as (.*) }
. q{bet that the mining group will reject a (.*)}
;
my $array_11=~ m{$sentence};
Последний комментарий: $array_11
имеет сильный запах кода, если это массив, то сделайте его массивом, а не несколькими скалярными переменными.
Вы можете искать /x
модификатор.
От perldoc perlre:
x Увеличьте удобочитаемость вашего шаблона, разрешая пробелы и комментарии.
Все сбежавшие места действительно безобразны и отвлекают. Итак, вот альтернатива:
my ($pattern) = map { qr/$_/ } join q{ }, split q{ }, <<'EOP';
Steve (.*), MarketWatch LONDON (.*) --
Shares of Anglo American rallied on Monday morning
as (.*) bet that the mining group will \w+ reject
\w+ a \w+(.*)
EOP
$text =~ $pattern;
NB: я покинул (.*)
потому что я не знал, чего хочет ОП, но посмотри комментарий Аксемана на ответ Мирод.