2010-10-28 14 views
6

चलो कहते हैं कि मैं इस तरह एक बहु लाइन स्ट्रिंग करते हैं:सी # में "न्यूनतम मैच" रेगेक्स खोज कैसे करें?

STARTFRUIT 
banana 
ENDFRUIT 

STARTFRUIT 
avocado 
ENDFRUIT 

STARTVEGGIE 
rhubarb 
ENDVEGGIE 

STARTFRUIT 
lime 
ENDFRUIT 

मैं सभी फल, कोई सब्जियों के लिए खोज करना चाहते हैं। मैं यह कोशिश:

MatchCollection myMatches = Regex.Matches(tbBlob.Text, "STARTFRUIT.*ENDFRUIT", RegexOptions.Singleline); 

foreach (var myMatch in myMatches) 
{ 
    Forms.MessageBox.Show(String.Format("Match: {0}", myMatch), "Match", Forms.MessageBoxButtons.OK, Forms.MessageBoxIcon.Information); 
} 

समस्या है, मुझे तीन मैचों की एक सरणी लौटने के बजाय, यह मेरे लिए एक बड़ा मैच पहले STARTFRUIT और शुरुआत और अंत में पिछले ENDFRUIT को शामिल देता है। क्या मैच खोज को "न्यूनतम" करने का कोई तरीका है? मुझे RegexOptions में कोई मदद नहीं दिखाई दे रही है।

उत्तर

21

परिमाणक के बाद एक non-greedy modifier (एक प्रश्न चिह्न) का उपयोग करें:

 
"STARTFRUIT.*?ENDFRUIT" 
      ^
     add this 

ध्यान दें कि प्रश्न चिह्न यहाँ जब यह एक परिमाणक, जहां इसका मतलब है के रूप में प्रयोग किया जाता है की तुलना में यहाँ एक अलग अर्थ है "शून्य से मेल खाते हैं या एक "।

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