2012-07-24 6 views
8

मैं नियमित अभिव्यक्तियों में बेहतर बनने की कोशिश कर रहा हूं। मुझे समझने की कोशिश कर रहा है कि (?> expression) का अर्थ क्या है। गैर-बैकटाकिंग सबएक्सप्रेस पर मुझे और जानकारी कहां मिल सकती है? THIS लिंक का विवरण कहता है:गैर-बैकट्रैकिंग सबएक्सप्रेस काम कैसे करता है "(?> एक्सपी)"

लालची उप-अभिव्यक्ति, जिसे गैर-बैकट्रैकिंग उप-अभिव्यक्ति के रूप में भी जाना जाता है। यह केवल एक बार मेल खाता है और फिर बैकट्रैकिंग में भाग नहीं लेता है।

यह अन्य लिंक: http://msdn.microsoft.com/en-us/library/bs2twtah(v=vs.71).aspx भी गैर बैक ट्रैकिंग उपसूचक की एक परिभाषा है, लेकिन मैं अभी भी यह समझने इसका क्या मतलब प्लस मैं एक उदाहरण है जहाँ मैं (?>exp)

उत्तर

9

का उपयोग करेगा नहीं सोच सकते हो रहा है हमेशा के रूप में, regular-expressions.info शुरू करने के लिए एक अच्छी जगह है।

एक परमाणु समूह का उपयोग करें यदि आप यह सुनिश्चित करना चाहते हैं कि जो कुछ भी मेल खाता है, वह मैच का हिस्सा रहेगा।

उदाहरण के लिए, "शब्द" है कि या रिक्तियों से अलग हो सकता है नहीं किया जा सकता है, तो इसके बाद एक कॉलन के एक नंबर से मिलान करने के लिए, एक उपयोगकर्ता regex की कोशिश की:

(?:[A-Za-z0-9_.&,-]+\s*)+: 

जब एक मैच था, सब कुछ ठीक था। लेकिन जब वहां नहीं था, तो उसका पीसी 100% सीपीयू लोड के साथ विनाशकारी बैकट्रैकिंग के कारण गैर-प्रतिक्रियाशील हो जाएगा क्योंकि रेगेक्स इंजन वस्तुतः उन शब्दों के मिलान संयोजन को खोजने का प्रयास करेगा जो निम्नलिखित कोलन से मेल खाते हैं। जो निश्चित रूप से असंभव था।

एक परमाणु समूह का उपयोग करके, यह रोका जा सकता था:

(?>[A-Za-z0-9_.&,-]+\s*)+: 

अब जो कुछ भी मिलान किया जा चुका है मिलान किया रहता है - कोई बैक ट्रैकिंग और इसलिए तेजी से बार में चूक गए।

8

Regex ट्यूटोरियल यहाँ उस पर एक पृष्ठ है: http://www.regular-expressions.info/atomic.html

मूल रूप से उसके द्वारा छोड देता है, जानकारी उलटे पांव लौटने अर्थ है कि a(?>bc|b)c मैचों abcc लेकिन नहीं abc

कारण यह दूसरी स्ट्रिंग से मेल नहीं खाता है क्योंकि यह bc के साथ एक मैच पाता है, और bc|b विकल्प के बारे में जानकारी को पीछे छोड़ देता है। यह अनिवार्य रूप से |b हिस्सा भूल जाता है। इसलिए, bc के बाद c नहीं है, और मैच विफल रहता है।

परमाणु समूहों का उपयोग करने की सबसे उपयोगी विधि, जिन्हें वे कहते हैं, धीमी रेगेक्स को अनुकूलित करना है। आप उपर्युक्त पृष्ठ पर अधिक जानकारी प्राप्त कर सकते हैं।

1

possessive quantifiers[a-z]*+ पर पढ़ें बैकट्रैकिंग इंजन को केवल पिछले चरण को याद रखें जो मेल खाने वाले सभी पिछले चरणों से मेल नहीं खाता है।

यह तब उपयोगी होता है जब बहुत से स्वीकार्य कदम संभावित होते हैं और यदि प्रत्येक चरण किसी भी संभावित बैकट्रैकिंग रिग्रेशन के लिए संग्रहीत किया जाता है तो वे स्मृति खाएंगे।

पोसिसिव क्वांटिफायर परमाणु समूहों के लिए एक लघुरूप हैं।

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