Я не уверен, что это ваш вопрос, но.
Регулярные выражения либо совпадают, либо нет. И выражение будет соответствовать переменному количеству ввода. Таким образом, это не может быть определено напрямую.
Однако возможно, если вы считаете, что существует возможность перекрытия, использовать интеллектуальную схему буферизации для достижения той же цели.
Есть много способов сделать это.
Один из способов - сопоставить все, что не совпадает, с помощью утверждений вплоть до начала.
матча (но не полный матч, который вы ищете).
Это вы просто выбросите и очистите от буфера. Когда вы получите совпадение, которое вы ищете, очистите буфер этих данных и данных перед ним.
Пример: /(<function.*?>)|([^<]*)/
Часть, которую вы выбросили / очистили из буфера, находится в буфере захвата группы 2.
Другой способ - если вы сопоставляете строки конечной длины, если вы ничего не соответствуете в
буфер, вы можете безопасно отбросить все от начала буфера до конца буфера минус длина конечной строки, которую вы ищете.
Пример: размер вашего буфера составляет 64 КБ. Вы ищете строку длиной 10. Она не была найдена в буфере. Вы можете безопасно очистить (64k - 10) байтов, сохранив последние 10 байтов. Затем добавьте (64k-10) байтов в конец буфера. Конечно, вам нужен только буфер размером 10 байт, постоянно удаляющий / добавляющий 1 символ, но больший буфер больше
эффективный, и вы можете использовать пороги для перезагрузки большего количества данных.
Если вы можете создать буфер, который легко сокращается / расширяется, доступны дополнительные параметры буферизации.