खबरदार! '[^,]+'
. प्रारूप की regexp_substr अभिव्यक्ति यदि सूची में कोई अशक्त तत्व है और आप उस वस्तु को या उसके बाद एक चाहते हैं तो अपेक्षित मान वापस नहीं करेगा। इस उदाहरण पर विचार करें जहां चौथा तत्व न्यूल है और मैं 5 वां तत्व चाहता हूं और इस प्रकार '5' को वापस करने की अपेक्षा करता हूं:
SQL> select regexp_substr('1,2,3,,5,6', '[^,]+', 1, 5) from dual;
R
-
6
हैरत में डालना! यह 5वां गैर-नल तत्व लौटाता है, वास्तविक 5वां तत्व नहीं! गलत डेटा लौटा और हो सकता है कि आप उसे पकड़ भी न पाएं। इसके बजाय इसे आजमाएं:
SQL> select regexp_substr('1,2,3,,5,6', '(.*?)(,|$)', 1, 5, NULL, 1) from dual;
R
-
5
तो, ऊपर सही किया गया REGEXP_SUBSTR 0 या अधिक अल्पविराम-सीमांकित वर्णों की 5 वीं घटना को देखने के लिए कहता है, जिसके बाद अल्पविराम या पंक्ति का अंत होता है (अगले विभाजक के लिए अनुमति देता है, चाहे वह अल्पविराम हो या पंक्ति का अंत) और जब पाया गया तो पहला उपसमूह लौटाएं (डेटा जिसमें अल्पविराम या पंक्ति का अंत शामिल नहीं है)।
खोज मिलान पैटर्न '(.*?)(,|$)'
समझाया गया:
( = Start a group
. = match any character
* = 0 or more matches of the preceding character
? = Match 0 or 1 occurrences of the preceding pattern
) = End the 1st group
( = Start a new group (also used for logical OR)
, = comma
| = OR
$ = End of the line
) = End the 2nd group
संपादित करें:अधिक जानकारी जोड़ी गई और रेगेक्स को सरल बनाया।
अधिक जानकारी के लिए यह पोस्ट देखें और आसान पुन:उपयोग के लिए एक फ़ंक्शन में इसे इनकैप्सुलेट करने के लिए एक सुझाव:REGEX एक सूची से nth मान का चयन करने के लिए, नल के लिए अनुमति देता हैयह वह पोस्ट है जहां मैंने प्रारूप की खोज की थी '[^,]+'
कोड> समस्या है। दुर्भाग्य से यह रेगेक्स प्रारूप है जिसे आप आमतौर पर किसी सूची को पार्स करने के तरीके के बारे में प्रश्नों के उत्तर के रूप में देखेंगे। '[^,]+'
. द्वारा लौटाए जा रहे सभी गलत डेटा के बारे में सोचकर मैं सिहर उठता हूं !