2008-09-08 12 views
50

से जावा 6 Pattern प्रलेखन:रेगेक्स "स्वतंत्र कैप्चरिंग समूह" क्या है?

विशेष निर्माणों (गैर कैप्चरिंग) एक गैर पर कब्जा समूह के रूप में

(?: एक्स)       एक्स,

...

(?> एक्स)       एक्स, एक स्वतंत्र, गैर पर कब्जा समूह

(?:X) और (?>X) बीच

क्या अंतर है के रूप में? इस संदर्भ में स्वतंत्र का अर्थ क्या है?

+0

'(> एक्स?)' के रूप में 'एक ही है [/ */+?] (: एक्स) +' [/ */+?]। – jobard

उत्तर

38

इसका मतलब है कि समूह atomic है, और यह एक मिलान समूह के लिए जानकारी उलटे पांव लौटने से फेंक देता है। तो, यह अभिव्यक्ति स्वामित्व है; ऐसा करने के बावजूद यह वापस नहीं आ जाएगा, क्योंकि पूरी तरह से सफल होने के लिए रेगेक्स का एकमात्र तरीका है। यह इस अर्थ में "स्वतंत्र" है कि यह एक मैच सुनिश्चित करने के लिए रेगेक्स के अन्य तत्वों के साथ बैकट्रैकिंग के माध्यम से सहयोग नहीं करता है।

6

आप foo(?>(co)*)co है, तो उस से मेल खाते हैं कभी नहीं होगा। मुझे यकीन है कि व्यावहारिक उदाहरण हैं जब यह उपयोगी होगा, O'Reilly की पुस्तक को आजमाएं।

+3

+1 उल्लेख के लिए ** ** ओ रेली पुस्तक –

0

(?>X[?/*/+])(?:X)[?/*/+]+ के समान है।

+0

शब्द 'में [पैटर्न Javadocs] independent' (http://docs.oracle.com/javase/7/docs/api/java/util/regex /Pattern.html) महत्वपूर्ण है। वे बिल्कुल वही नहीं हैं, क्योंकि आंशिक मिलान विफल होने पर '(?> एक्स) 'कोई बैकट्रैक नहीं करता है, इसलिए कुछ चीजें जो एक का उपयोग करने से मेल खाते हैं, वे दूसरे का उपयोग नहीं करेंगे। [लेख @erickson से जुड़ा हुआ मेरे लिए मददगार था।] (Http://www.regular-expressions.info/atomic.html) – xdhmoore

+0

क्षमा करें, मैं इस में वर्तमान में नहीं हूँ, इसलिए हो सकता है मेरा उत्तर सही नहीं है। लेकिन आपके अपने संदर्भ से: "इनमें से अधिकतर स्वामित्व वाले क्वांटिफायर का भी समर्थन करते हैं, जो अनिवार्य रूप से परमाणु समूह के लिए एक उल्लेखनीय सुविधा हैं।" यही वह है जिसे मैं व्यक्त करने की कोशिश कर रहा था। बाद के मामले में, अतिरिक्त '+' चरित्र का मतलब है कि संभावित क्वालीफायर। – beibichunai

संबंधित मुद्दे