정규식 플래그를 비롯하여 Perl 정규식을 serialize해야하는 일부 코드 작업 중입니다. 플래그의 하위 집합 만 지원되므로 /u
과 같이 지원되지 않는 플래그가 정규식 개체에있는 경우이를 감지해야합니다.Perl API에서 정규식을 조사하는 방법
코드의 현재 버전은이 작업을 수행 :
는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
문자별로 문자 플래그를 찾을 수를 처리합니다.
여기서 문제는 regex 플래그의 문자열이 변경되었다는 것입니다. (필자는 Perl 5.14에서 생각합니다. (?i-xsm:foo)
~ (?^i:foo)
, 이는 구문 분석에 고통을줍니다.
perl
의 버전을 확인하거나 두 가지 경우를 모두 처리 할 수있는 구문 분석기를 작성할 수는 있지만 뛰어난 내성 검사 방법이 있어야한다는 것을 알려줍니다.
이는 방법입니다 가서, 감사합니다 – friedo
@ 프리드, 추가 (안된) XS 코드. – ikegami
고마워, @ikegami. 저는 C 코드를 시작점으로 삼아 필요한 것을 얻을 수있었습니다. 한 가지주의해야 할 점은 반환 값은 역순으로 팝해야한다는 것입니다. 따라서'flags_sv'가 초 대신 꺼집니다. – friedo