2011-06-29 27 views
7

नियमित अभिव्यक्ति ठीक प्रतीत होती है, क्योंकि पहली पंक्ति रेखा "helloworld" के साथ सबस्ट्रिंग को सही ढंग से प्रतिस्थापित करती है, लेकिन उसी अभिव्यक्ति बाद में मेल नहीं खाती क्योंकि मैं नहीं कर सकता "whynothelloworld" देखें? क्योंकि आप बस "HelloWorld" से बदल दिया सांत्वनापैटर्न.मैट्स काम नहीं करता है, जबकि प्रतिस्थापित करता है

System.out.println(current_tag.replaceAll("^[01][r]\\s", "helloworld")); 

if (Pattern.matches("^[01][r]\\s", current_tag)) { System.out.println("whynothelloworld?");} 

उत्तर

15

Pattern.matches()पूरे स्ट्रिंग से मिलान करने की अपेक्षा करता है, केवल एक सबस्ट्रिंग नहीं।

उपयोग बजाय regex मिलान वस्तु की .find() विधि:

Pattern regex = Pattern.compile("^[01]r\\s"); 
Matcher regexMatcher = regex.matcher(current_tag); 
foundMatch = regexMatcher.find(); 
+0

ऐसा लगता है कि हर किसी की तरह लगता है लेकिन जब जावा पर पहली बार आया तो मुझे वह गलती हुई। मैं कैसे बच निकला मैं जानता नहीं। किसी भी तरह से मैं 'खोज' का उपयोग करने के लिए हमेशा भाग्यशाली था, कभी भी 'मैचों' नहीं था, और इससे पहले कि मैंने अंतर देखा। मुझे लगता है कि ऐसा इसलिए था क्योंकि मैं पहले जावा प्रोजेक्ट में लंबे समय तक (आईएसएच) पहले बढ़ता हुआ मिलान कर रहा था। फिर भी, मैं इसे एक डिजाइन/उपयोगकर्ता-इंटरफ़ेस दोष मानता हूं कि उन्होंने यह मूर्खतापूर्ण चीज़ की है। – tchrist

+0

यहां तक ​​कि वीडर भी पाइथन है: 're.match' स्ट्रिंग की शुरुआत के लिए regex को अंधाधुंध रूप से एंकर करता है (लेकिन अंत तक नहीं) जबकि' re.search() 'अपेक्षित व्यवहार करता है (जैसे जावा में 'matcher.find()')। –

+0

अब यह स्पष्ट है :) tnx आवंटित, यह एक आकर्षण की तरह काम करता है! –

-3

पर यह फिर से मेल नहीं कर सकते हैं।

संपादित करें: क्षमा करें, मैं भूल गया कि यह कैसे काम करता है।

+0

'replaceAll' एक नया स्ट्रिंग रिटर्न - यह एक मौजूदा स्ट्रिंग की सामग्री को बदल नहीं सकते, के रूप में तार अपरिवर्तनीय हैं। –

+0

@ जोन स्कीट: ठीक है, ऐसा लगता है कि मेरा जावा थोड़ा जंगली हो रहा है। :-p – Sqenqe

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