2010-02-16 20 views
11

मैं समकक्ष चिह्न (=) से शुरू होने वाले सभी सबस्ट्रिंग्स को खोजने के लिए एक नियमित अभिव्यक्ति का उपयोग करने की कोशिश कर रहा हूं और बीच में किसी भी संख्या के साथ अर्धविराम (;) के साथ समाप्त होता है। यह =*;एक = और ए के साथ नियमित अभिव्यक्ति;

कुछ कारणों से, बराबर पंजीकरण नहीं कर रहा है। क्या कोई प्रकार का बचने वाला चरित्र है जो रेगेक्स नोटिस को मेरे बराबर संकेत देगा?

यदि मैं इस प्रश्न पर कोई बीयरिंग करता हूं तो मैं जावा में काम कर रहा हूं।

उत्तर

17

यह वही हो सकता है जो आप खोज रहे हैं। आपको एक चरित्र सेट या वाइल्ड कार्ड वर्ण निर्दिष्ट करने की आवश्यकता है जिसे आप तारांकन लागू कर रहे हैं।

"=([^;]*);" 

तुम भी अनिच्छुक परिमाणक उपयोग कर सकते हैं:

"=(.*?);" 

कोष्ठक अब आप समूह हैं का उपयोग करना। मेरा मानना ​​है कि पहला समूह पूरे पूरे मैच है, और group[1] समूह कोष्ठक के भीतर पाया गया समूह है।

कोड की तरह कुछ लग सकता है:।

Regex r = new Regex("=([^;]*);"); 
Match m = r.Match(yourData); 
while (m.Success) { 
    string match = m.Groups[1]; 
    // match should be the text between the '=' and the ';'. 
} 
+0

यह मैं मिला मैं के लिए क्या देख रहा था, लेकिन यह केवल पता लगाने के लिए क्या उन सीमांकक के बीच है संभव है? दूसरे शब्दों में, मैं = और; के बीच क्या प्राप्त करना चाहता हूं; अभिव्यक्ति में वास्तव में उन्हें शामिल किए बिना। धन्यवाद – chama

+1

यदि आप उस मूल्य के आस-पास के माता-पिता जोड़ते हैं जो आप खोजना चाहते हैं, तो आप केवल माता-पिता के समूह() विधियों में से एक को माता-पिता में थोड़ा सा पुनर्प्राप्त करने के लिए उपयोग कर सकते हैं। – mkb

+0

ऐसा करने के लिए समूह() विधि का मैं वास्तव में उपयोग कैसे करूं? – chama

7

इस ', = संकेत के किसी भी संख्या 0 सहित "के लिए लग रहा है

=*; 

यदि आप चाहते हैं" = अन्य पात्रों के किसी भी संख्या के बाद "आप

=.*; 
हालांकि

, कि इच्छा चाहते हैं लालची से मेल खाते हैं - अगर आप आलसी मिलान चाहते हैं (ताकि यह अगले समूह को प्राप्त करने पर एक समूह को रोक सके) आप चाहें:

=.*?; 
1

आपके द्वारा प्रदान किया गया रेगेक्स ;, ===;, ..., ================; से मेल खाता है। =.*; (या =.*?; के बारे में अगर लालची की आवश्यकता है)?

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