Следующее регулярное выражение дает мне правильные результаты при попытке в редакторе Notepad ++, но при попытке с помощью следующей программы perl я получаю неправильные результаты. Правильный ответ и объяснение, пожалуйста.регулярное выражение, которое соответствует любому слову, которое начинается с pre и заканчивается в al
Ссылка на файл я использовал для тестирования мой шаблон выглядит следующим образом:
(http://sainikhil.me/stackoverflow/dictionaryWords.txt)
Регулярное выражение: (. *)^Предварительно ал (\ S *) $
Perl программа:
use strict;
use warnings;
sub print_matches {
my $pattern = "^Pre(.*)al(\s*)\$";
my $file = shift;
open my $fp, $file;
while(my $line = <$fp>) {
if($line =~ m/$pattern/) {
print $line;
}
}
}
print_matches @ARGV;
не избежать знака доллара –
Вы уверены? Если я это сделаю, я получаю следующую ошибку. Final $ должно быть \ $ или $ name в строке ex2.pl 8, в строке синтаксическая ошибка в строке ex2.pl 8, рядом с "="^Pre (. *) Al (\ s *) $ "" – saint1729
На самом деле, OP находится прямо на этом. '' 'Нужно экранировать, потому что это строка с двойными кавычками, а не шаблон регулярного выражения. ''^Pre (. *) Al (\ s *) \ $ "' (требуется экранирование) против '/^Pre (. *) Al (\ s *) $ /' (не убежать). Кстати, если вы хотите присвоить шаблон переменной как обычной строке, вам не нужно избегать '' ', если вы используете одиночные кавычки вместо двойных кавычек. –