Как проанализировать регулярные выражения в Perl API
Я работаю над некоторым кодом, который должен сериализовать регулярные выражения Perl, включая любые флаги регулярных выражений. Поддерживается только подмножество флагов, поэтому мне нужно определить, когда неподдерживаемые флаги, такие как/u
находятся в объекте регулярных выражений.
Текущая версия кода делает это:
static void serialize_regex_flags(buffer *buf, SV *sv) {
char flags[] = {0,0,0,0,0,0};
unsigned int i = 0, f = 0;
STRLEN string_length;
char *string = SvPV(sv, string_length);
Потом вручную обрабатываетstring
char-by-char, чтобы найти флаги.
Проблема здесь в том, что строковая спецификация флагов регулярных выражений изменилась (я думаю, в Perl 5.14), например, с.(?i-xsm:foo)
в(?^i:foo)
, что делает разбор боли.
Я мог бы проверить версиюperl
Или просто напишите анализатор для обработки обоих случаев, но что-то подсказывает мне, что должен существовать превосходный метод самоанализа.