Как обрабатывать многострочную строку одновременно - PullRequest
5 голосов
/ 24 мая 2011

Я хотел бы получить подстроку между двумя разделителями (регулярными выражениями) из строки.Я хочу использовать это:

while (<>) {
  if (/START/../END/) {
    next if /START/ || /END/;
    print;
  }
}

Но это работает на линии стандартного ввода.Я хотел бы, чтобы это работало на строках строки.Как?

Ответы [ 3 ]

6 голосов
/ 24 мая 2011

Если вы хотите обработать строку, которая уже содержит несколько строк, используйте split:

foreach (split(/\n/, $str)) {
  if (/START/../END/) {
    next if /START/ || /END/;
    print;
  }
}
5 голосов
/ 24 мая 2011

Просто:

my ($between) = $string =~ /START(.*?)END/s;

В качестве альтернативы читайте из строки:

use 5.010;
open my $string_fh, "<", \$string or die "Couldn't open in-memory file: $!";
while ( <$string_fh> ) {
    ...
0 голосов
/ 24 мая 2011

Есть много способов получить многострочные данные в строку. Если вы хотите, чтобы это происходило автоматически при чтении ввода, вам нужно установить $/ (вероятно, '' для абзацев или undef для всего файла), чтобы позволить вам читать более одной строки за раз.

см. Раздел «Многострочный» @ perldoc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...