我正在处理一些需要序列化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);
然后手动逐个字符处理字符串以查找标志。
问题在于,正则表达式标志的字符串化已经改变(我想是在 Perl 5.14 中),例如从 (?i-xsm:foo)
改为 (?^i:foo)
,这使得解析变得很痛苦。
我可以检查 perl
的版本,或者编写解析器来处理两种情况,但某些东西告诉我一定有更好的内省方法可用。
flags_sv
首先弹出而不是第二个)。 - friedo