यह समस्या उन सभी लोगों के लिए जानी जाती है जिन्होंने हेनरी स्पेंसर के रेगेक्स लाइब्रेरी कार्यान्वयन के साथ काम किया:आलसी क्वांटिफ़ायर को एक और एक ही शाखा में लालची क्वांटिफ़ायर के साथ नहीं मिलाया जाना चाहिए क्योंकि इससे अपरिभाषित व्यवहार होता है। आर में प्रयुक्त टीआरई रेगेक्स इंजन वही व्यवहार दिखाता है। हालांकि आप आलसी और लालची क्वांटिफायर को कुछ हद तक मिला सकते हैं, आपको हमेशा यह सुनिश्चित करना चाहिए कि आपको एक सुसंगत परिणाम मिले।
समाधान केवल कैप्चरिंग समूह के अंदर आलसी क्वांटिफ़ायर का उपयोग करना है:
select REGEXP_REPLACE('+000099,8420000', '^\+?(-?)0*([0-9]+?,[0-9]+?)0*$','\1\2') as Result from dual
ऑनलाइन डेमो देखें
[0-9]+?,[0-9]+?
भाग 1 या अधिक अंकों से मेल खाता है लेकिन जितनी बार संभव हो अल्पविराम के साथ और फिर 1 या अधिक अंक, जितना संभव हो उतना कम।
कुछ और परीक्षण (select REGEXP_REPLACE('+00009,010020','[0-9]+,[0-9]+?([1-9])','\1') from dual
कोड> उपज +20
) साबित करें कि एक समूह में पहला क्वांटिफायर क्वांटिफायर लालची प्रकार सेट करता है . ऊपर के मामले में, समूह 0 क्वांटिफायर लालची लालची . पर सेट है पहले ?
. द्वारा क्वांटिफायर, और समूह 1 (यानी ([0-9]+?,[0-9]+?)
) लालच का प्रकार पहले +?
. के साथ सेट किया गया है (जो आलसी है)।