Что вы пытаетесь сделать в этом регулярном выражении? Похоже, вы пытаетесь найти любой случай, когда за новой строкой следует хотя бы один символ, после чего вы должны напечатать номер строки ($.
) того, что соответствует этому критерию.
Если вы не возражаете против моего вопроса, какова здесь большая цель?
В любом случае см. Эту статью для ясного обсуждения многострочного соответствия: Regexp Power
Отредактировано после перехода к SO : Если вы действительно хотите найти строки длиной менее 75 символов и , следующую строку, начинающуюся с пробела, я бы не стал используйте одно регулярное выражение. Описание указывает на более простое и ясное (я думаю) решение: (1) отфильтровать все строки длиной менее 75 символов (функция length
хороша для этого). Для оставшихся строк (2) проверьте, начинается ли следующая строка с пробела. Это дает вам ясную логику и простое регулярное выражение для написания.
В ответ на вопрос о получении «следующей» строки. Подумайте об этом наоборот: вы хотите проверять каждую следующую строку, но только если строка предыдущая была меньше 75 символов. Так как насчет этого:
my $prev = <>; # Initialize $prev with the first line
while (<>) {
# Add 1 to 75 for newline or chomp it perhaps?
if (length $prev < 76) {
print "$.: $_" if $_ =~ m/^\s/;
}
$prev = $_;
}
(Обратите внимание, что я ничего не знаю о формате vCard и что \s
шире, чем буквально «один пробел». Поэтому вам, возможно, придется скорректировать этот код, чтобы он лучше соответствовал вашей проблеме.)