Предположим, вы хотите сопоставить текст, разделенный двойными символами, например:
a = <<
Hello
World!
>>
Регулярное выражение /<<(.*)>>/, похоже, делает это, но, к сожалению, когда их можно повторить, жадное сопоставление становится слишком большим:
a = <<
Hello
World!
>>
b = <<
Goodbye
World!
>>
Предыдущее регулярное выражение захватит
Hello
World!
>>
b = <<
Goodbye
World!
Очевидный ответ - сделать регулярное выражение нежадным: /<<(.*?)>>/
К сожалению, это приводит к серьезным проблемам с производительностью для длинных строк (по крайней мере, в Perl). Если разделители были одиночными символами, то мы могли бы использовать класс символов (все, кроме символа), чтобы решить жадную проблему.
Есть ли какие-нибудь идеи относительно регулярного выражения, чтобы сделать это соответствие без потери производительности?
Примечание: я должен использовать Perl, и это должно быть регулярное выражение из-за большей системы, в которую он встроен.
Спасибо.