Perl как остановить совпадение с шаблоном регулярных выражений при возникновении другого совпадения с шаблоном?

#regex #perl

#регулярное выражение #perl

Вопрос:

У меня есть код сопоставления с шаблоном, подобный:

 #!/usr/bin/perl
use strict;
use warnings;
open(HTML,"<source.html");
my $html = do {local $/; <HTML>};
$html =~ s/n *//g;
while ($html=~m/<OPTION [^>]*>D*([^<] )/g){
    print $1;
    print "n";
}
close(HTML)
  

Я хочу делать это до тех пор, пока файл, однако, я хочу остановить и прервать во время цикла, он видит любой символ, который совпадает с шаблоном, начинающимся с:

 </S
  

Как я могу это сделать с помощью Perl?

Ответ №1:

Если вы хотите выйти из цикла, вам следует использовать последнюю команду:

 last if ( $pattern ~= /^</S/ );
  

Комментарии:

1. Моя проблема в том, что моя первая проверка регулярных выражений удаляет слова, содержащие «</ S», поэтому я должен изменить свой код, выполнив что-то с моим шаблоном в цикле while?

Ответ №2:

 ( my $to_search = $html ) =~ s{</S.*}{}s;
while ($to_search =~ m{<OPTION [^>]*>D*([^<] )}g) {
    print("$1n");
}