2011-08-10 4 views
6

मैं इस RegEx है:मेरी नियमित अभिव्यक्ति बहुत अधिक मेल खाती है। मैं इसे सबसे छोटे संभव पैटर्न से मेल खाने के लिए कैसे कह सकता हूं?

('.+') 

यह सी में की तरह चरित्र शाब्दिक मिलान करने के लिए उदाहरण के लिए, अगर मैं 'a' b 'a' यह उनके चारों ओर एक और ' के मैच चाहिए है है।

हालांकि, यह b से भी मेल खाता है (यह नहीं होना चाहिए), संभवतः क्योंकि यह सख्ती से बोल रहा है, ' के बीच भी।

यह इस प्रकार से गलत हो जाता है का एक स्क्रीनशॉट है (मैं वाक्य रचना हाइलाइटिंग के लिए इसका उपयोग करें):
screenshot

मैं नियमित अभिव्यक्ति के लिए काफी नई हूँ। मैं रेगेक्स को यह कैसे कह सकता हूं कि यह मिलान न करें?

उत्तर

10

यह लालची हो रहा है और पहले एस्ट्रोफ़े से मेल खाता है और आखिरी और बीच में सब कुछ मिल रहा है।

यह किसी भी एस्ट्रोफ़े से मेल नहीं खाता है।

('[^']+') 

गैर-लालची मैचों का प्रयास करने का एक और विकल्प है।

('.+?') 
+0

धन्यवाद, यह काम करता है। नियमित अभिव्यक्तियों में "लालची" का क्या अर्थ है? –

+0

'' '' 'के साथ काम नहीं करेगा, जो सी में एक चार अक्षर है (जैसा कि सवाल बताता है, इसे उनसे मेल खाना चाहिए)। – sidyll

+2

यह पृष्ठ, http://www.regular-expressions.info/ repeat.html, मैं समझाने से बेहतर समझा सकता हूं। असल में, यह लालची होने पर जितना संभव हो सके मैच करेगा। – gpojd

-1

आप qutoes से बचने के लिए की जरूरत है:

\'[^\']+\' 

संपादित करें: हम्म, मुझे लगता है हम करेंगे क्या यह उत्तर क्या लैंग/सिस्टम प्रयोग कर रहे हैं उस पर निर्भर करता है।

+0

यह ओबीजेसी है: http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html – miku

1

प्रयास करें:

('[^']+') 

^साधन वर्ग कोष्ठक में लोगों को छोड़कर हर चरित्र में शामिल हैं। इस तरह, यह 'a' b 'a' से मेल नहीं खाएगी वहाँ के बीच में एक ' है, क्योंकि, इसलिए बजाय इसे 'a'

+2

आपके उदाहरण में '^' एक एंकर के रूप में उपयोग किया जा रहा है। जैसा कि आप उम्मीद करते हैं, काम करने के लिए इसे ब्रैकेट के अंदर होना चाहिए। – gpojd

+0

मेरा बुरा, अब तय है। –

3

के दोनों मामलों आप एक गैर लालची संस्करण की कोशिश की है, उदा है दे देंगे ('.+?')?

आमतौर पर दो मोड मिलान (या क्वांटिफायर के दो सेट), अधिकतम (लालची) और न्यूनतम (गैर लालची) होते हैं। सबसे पहले सबसे लंबे समय तक संभव मैच, बाद में सबसे कम परिणाम होगा। आप Perl Cookbook (धारा 6.15) में इसके बारे में पढ़ सकते हैं (हालांकि पर्ल संदर्भ में)।

+0

पर्ल-संगत रेगेक्स के लिए यह अच्छी सलाह है, लेकिन अन्य रेगेक्स बोलियों के लिए एक त्रुटि (जो अक्सर चुपचाप विफल हो जाती है)। – tripleee

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

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