खोज…


परिचय

नियमित गैर-कैप्चरिंग समूह इंजन को समूह में फिर से प्रवेश करने की अनुमति देते हैं और कुछ अलग से मिलान करने का प्रयास करते हैं (जैसे कि एक अलग विकल्प, या कम वर्णों का मिलान तब होता है जब एक क्वांटिफायर का उपयोग किया जाता है)।

परमाणु समूह नियमित गैर-कैप्चरिंग समूहों से अलग होते हैं, जिसमें बैकट्रैकिंग निषिद्ध है। एक बार समूह से बाहर निकल जाने के बाद, सभी बैकट्रैकिंग जानकारी को छोड़ दिया जाता है, इसलिए कोई वैकल्पिक मैच का प्रयास नहीं किया जा सकता है।

टिप्पणियों

एक परिमाणी मात्रात्मक एक परमाणु समूह की तरह व्यवहार करता है कि इंजन एक टोकन या समूह पर पीछे जाने में असमर्थ होगा।

कार्यक्षमता के मामले में निम्नलिखित समान हैं, हालांकि कुछ दूसरों की तुलना में तेज़ होंगे:

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 उस पाठ पर सफलतापूर्वक मेल करने में सक्षम है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow