Как отобразить многострочный (каждая строка имеет одинаковый формат с использованием Perl - PullRequest
0 голосов
/ 01 апреля 2019

Я пытался отобразить содержимое каждой строки, используя perl, и каждая строка имеет один и тот же формат.

У меня есть успешное отображение первой строки, но как только я добавляю $ после регулярного выражения, все идет не так.однако, если я удаляю $, регулярное выражение может соответствовать только первой строке, а игорн - остальным

Вот содержимое

$bar ="0 qid:85 1:0.666667 2:0.666666 3:0.857143 #docid = 579
0 qid:85 1:0.666667 2:0.666666 3:0.857143 #docid = 579";

m/^([0-2])[\s]qid\:(\d+).*?\#docid[\s]=[\s](\d+)+$/

1 Ответ

1 голос
/ 01 апреля 2019
  • Вам нужно /m, чтобы изменить определения ^ и $ в соответствии с вашими потребностями.
    • ^ обычно совпадает только в начале строки. С /m он также совпадает после перевода строки.
    • $ обычно соответствует только при переводе строки в конец строки и в конец строки. С /m он также совпадает с любым переводом строки.
  • Вам нужно /g, чтобы получить все совпадения (а не только первое).
  • [\s] - странный способ написания \s.
  • (\d+)+ (в конце) должно быть (\d+).
  • Я добавил пробел к шаблону, чтобы сделать его более читабельным, что стало возможным с помощью /x.

Исправлено:

while ( $bar =~ /^([0-2]) \s qid:(\d+) \s .*? \s \#docid \s = \s (\d+)$/mgx ) {
   my ($foo, $qid, $docid) = ($1, $2, $3);
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...