@matches = ($filestr =~ /^[0-9]+\. (.+\n)*/mg);
У меня есть файл, который был считан в filestr, но по какой-то причине выше регулярное выражение, которое должно соответствовать начало строки, с последующим числом, точкой, пробел, а затем любое количество строк, за которыми следует новая строка (при этом заканчивается, когда на ней есть строка с только новой строкой), похоже, просто выдает некоторые отдельные строки из файла.Почему это не Perl регулярное выражение работы
Когда я сделать что-то вроде
@matches = ($filestr =~ /^[0-9]+\. .+\n/mg);
я правильно сопрягать одну строку.
Когда я делаю это
@matches = ($filestr =~ /^[0-9]+\. .+\n.+\n/mg);
Я соответствую тем же отдельным строкам, а затем каким-то, казалось бы, не связанными линиями. Что случилось с моим регулярным выражением?
Примечание: регулярное выражение отлично работает в этом тесте регулярного выражения: https://regex101.com/, он просто не будет работать в perl.
Пример, в данном тексте:
1. This should
match
2. This should too
3. This
one
also
регулярное выражение должно соответствовать
1. This should
match
и
2. This should too
и
3. This
one
also
Просто FYI: когда разрывы строк вступают в игру, используйте '\ r' вместо' \ n'. Однако здесь лучше всего изменить весь подход и прочитать по очереди, проверяя каждый последующий. –
Спасибо за предложение. Я просто попробовал \ R, но получаю тот же результат, что и с \ n. –
Знаете ли вы, что вы можете проверить линию за строкой так, как вы предложили? Похоже, я, по сути, ручно разделял бы регулярное выражение.Сначала проверьте, соответствует ли строка^[0-9] + \. , затем проверяем соответствие строки + \ n для остальной части первой строки и всех последующих строк (пока я не получил строку с единственной новой строкой на ней, после чего мне пришлось бы перезапустить). –