में रेगेक्स का आत्मनिरीक्षण कैसे करें मैं कुछ कोड पर काम कर रहा हूं जिसे किसी भी रेगेक्स झंडे सहित पर्ल रेगेक्स को क्रमबद्ध करने की आवश्यकता है। झंडे का केवल एक सबसेट समर्थित है, इसलिए मुझे पता लगाना चाहिए कि /u
जैसे असमर्थित झंडे regex ऑब्जेक्ट में हैं।पर्ल एपीआई
कोड के वर्तमान संस्करण इस करता है:
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
चार-दर-चार झंडे लगाने के लिए संसाधित करता है।
समस्या यह है कि रेगेक्स झंडे की स्ट्रिंगफिकेशन बदल गई है (मुझे लगता है कि पर्ल 5.14 में) उदा। (?i-xsm:foo)
से (?^i:foo)
, जो दर्द को पार्सिंग करता है।
मैं perl
के संस्करण की जांच कर सकता हूं, या दोनों मामलों को संभालने के लिए केवल पार्सर लिख सकता हूं, लेकिन कुछ मुझे बताता है कि आत्मनिरीक्षण की एक बेहतर विधि उपलब्ध होनी चाहिए।
मुझे लगता है कि इस तरह से है जाने के लिए, धन्यवाद – friedo
@friedo, जोड़ा (untested) एक्सएस कोड। – ikegami
धन्यवाद, @ikegami। मैं आपके सी कोड के साथ शुरुआती बिंदु के रूप में जो कुछ चाहता था उसे प्राप्त करने में सक्षम था। ध्यान देने योग्य बात यह है कि वापसी मूल्यों को रिवर्स ऑर्डर में पॉप किया जाना चाहिए (इसलिए 'flags_sv' दूसरे के बजाय पहले आता है।) – friedo