Как анализировать регулярные выражения в 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);

Затем вручную обрабатывает stringchar -по -char, чтобы найти флаги.

Проблема здесь в том, что строковое определение флагов регулярных выражений изменилось (я думаю, что в Perl 5.14 )от, например,. от (?i-xsm:foo)до (?^i:foo), что затрудняет синтаксический анализ.

Я мог бы проверить версию perlили просто написать синтаксический анализатор для обработки обоих случаев, но что-то подсказывает мне, что должен быть доступный более совершенный метод самоанализа.

11
задан friedo 8 August 2012 в 22:07
поделиться