Regular Expressions
परमाणु समूहन
खोज…
परिचय
नियमित गैर-कैप्चरिंग समूह इंजन को समूह में फिर से प्रवेश करने की अनुमति देते हैं और कुछ अलग से मिलान करने का प्रयास करते हैं (जैसे कि एक अलग विकल्प, या कम वर्णों का मिलान तब होता है जब एक क्वांटिफायर का उपयोग किया जाता है)।
परमाणु समूह नियमित गैर-कैप्चरिंग समूहों से अलग होते हैं, जिसमें बैकट्रैकिंग निषिद्ध है। एक बार समूह से बाहर निकल जाने के बाद, सभी बैकट्रैकिंग जानकारी को छोड़ दिया जाता है, इसलिए कोई वैकल्पिक मैच का प्रयास नहीं किया जा सकता है।
टिप्पणियों
एक परिमाणी मात्रात्मक एक परमाणु समूह की तरह व्यवहार करता है कि इंजन एक टोकन या समूह पर पीछे जाने में असमर्थ होगा।
कार्यक्षमता के मामले में निम्नलिखित समान हैं, हालांकि कुछ दूसरों की तुलना में तेज़ होंगे:
a*+abc
(?>a*)abc
(?:a+)*+abc
(?:a)*+abc
(?:a*)*+abc
(?:a*)++abc
(?>) के साथ समूहीकरण
परमाणु समूह का उपयोग करना
परमाणु समूहों के पास खुले पैरेन के बाद एक ?>
साथ प्रारूप (?>...)
।
निम्नलिखित नमूना पाठ पर विचार करें:
ABC
रेगेक्स पाठ की स्थिति 0 पर शुरू होने वाले मैच का प्रयास करेगा, जो ABC
में A
से पहले है।
यदि केस-असंवेदनशील अभिव्यक्ति (?>a*)abc
A
(?>a*)abc
का उपयोग किया गया, (?>a*)
A
(?>a*)
1 वर्ण से मेल खाता है, तो
BC
मिलान करने के लिए शेष पाठ के रूप में। (?>a*)
A (?>a*)
समूह से बाहर निकल गया है, और शेष पाठ पर abc
का प्रयास किया गया है, जो मेल करने में विफल रहता है।
इंजन परमाणु समूह में पीछे जाने में असमर्थ है, और इसलिए वर्तमान पास विफल हो जाता है। इंजन पाठ में अगली स्थिति में जाता है, जो कि स्थिति 1 पर होगा, जो A
बाद और ABC
के B
से पहले है।
Regex (?>a*)abc
A
(?>a*)abc
का पुनः प्रयास किया जाता है, और (?>a*)
A
(?>a*)
A
0 से मेल खाता है,
BC
मिलान करने के लिए शेष पाठ के रूप में। (?>a*)
A (?>a*)
समूह से बाहर abc
जाता है और abc
का प्रयास किया जाता है, जो विफल हो जाता है।
फिर से, इंजन परमाणु समूह में पीछे जाने में असमर्थ है, और इसलिए वर्तमान पास विफल हो जाता है। पाठ में सभी पदों के समाप्त होने तक रेगेक्स विफल होता रहेगा।
एक गैर-परमाणु समूह का उपयोग करना
नियमित गैर-कैप्चरिंग समूहों के पास खुले पैरेन के बाद एक ?:
साथ प्रारूप (?:...)
।
एक ही नमूना पाठ को देखते हुए, लेकिन मामले-असंवेदनशील अभिव्यक्ति के साथ (?:a*)abc
बजाय, एक मैच तब होता है जब से बैकट्रैकिंग की अनुमति होती है।
सबसे पहले, (?:a*)
A
(?:a*)
पाठ में अक्षर A
उपभोग करेगा
ABC
छोड़ने
BC
मिलान करने के लिए शेष पाठ के रूप में। (?:a*)
A (?:a*)
समूह से बाहर निकल गया है, और शेष पाठ पर abc
का प्रयास किया जाता है, जो मेल करने में विफल रहता है।
इंजन (?:a*)
A
(?:a*)
समूह में वापस आ जाता है और 1 कम वर्ण से मेल खाने का प्रयास करता है: 1 A
वर्ण के मिलान के बजाय, यह 0 A
वर्णों से मेल खाने का प्रयास करता है, और (?:a*)
A
(?:a*)
समूह से बाहर निकल जाता है। यह छोड़ देता है
ABC
मिलान करने के लिए शेष पाठ के रूप में। रेगेक्स abc
अब शेष पाठ से सफलतापूर्वक मेल करने में सक्षम है।
अन्य उदाहरण पाठ
परमाणु और गैर-परमाणु समूहों (फिर, केस-असंवेदनशील) दोनों के साथ इस नमूना पाठ पर विचार करें:
AAAABC
रेगेक्स पाठ की स्थिति 0 पर शुरू होने वाले मैच का प्रयास करेगा, जो AAAABC
में पहले A
से पहले है।
परमाणु समूह का उपयोग करने वाला पैटर्न (?>a*)abc
A
(?>a*)abc
से मेल नहीं खा सकेगा, जो कि ऊपर के परमाणु ABC
उदाहरण के लिए लगभग समान रूप से व्यवहार करता है: A
वर्णों के सभी 4 का पहली बार (?>a*)
A
(?>a*)
साथ मिलान किया जाता है (?>a*)
BC
को छोड़कर (?>a*)
शेष पाठ मेल खाने के लिए), और abc
उस पाठ पर मेल नहीं कर सकता है। समूह फिर से प्रवेश करने में सक्षम नहीं है , इसलिए मैच विफल हो जाता है।
गैर-परमाणु समूह (?:a*)abc
A
(?:a*)abc
का उपयोग करने वाला पैटर्न ऊपर गैर-परमाणु ABC
उदाहरण के समान व्यवहार करने में सक्षम होगा: A
वर्ण के सभी 4 पहले (?:a*)
A
(?:a*)
साथ मेल खाते हैं (छोड़ रहे हैं (?:a*)
BC
शेष पाठ के रूप में मिलान करने के लिए), और abc
उस पाठ पर मेल करने में असमर्थ है। समूह को फिर से दर्ज किया जा सकता है, इसलिए एक कम A
का प्रयास किया जाता है: 3 A
वर्णों को 4 के बजाय मिलान किया जाता है ( ABC
को मिलान करने के लिए शेष पाठ के रूप में छोड़कर), और abc
उस पाठ पर सफलतापूर्वक मेल करने में सक्षम है।