2010-03-26 20 views
9

क्या यह जानना संभव है कि स्ट्रीम/स्ट्रिंग में कोई इनपुट है जो नियमित अभिव्यक्ति से मेल खाता है।क्या java.util.regex.Pattern आंशिक मिलान कर सकते हैं?

उदाहरण के लिए

String input="AA"; 
Pattern pat=Pattern.compile("AAAAAB"); 
Matcher matcher=pat.matcher(input); 
//<-- something here returning true ? 

या

String input="BB"; 
Pattern pat=Pattern.compile("AAAAAB"); 
Matcher matcher=pat.matcher(input); 
//<-- something here returning false ? 

धन्यवाद

+1

वास्तव में यह रेगेक्स का काम नहीं है। पैटर्न इनपुट का एक सबस्ट्रिंग होना चाहिए, या कोई मैच नहीं है। आप अपनी खुद की चीज लिख सकते हैं जो वही करता है, लेकिन यह एक रिवर्स रेगेक्स की तरह होगा। यदि आप अपने 'इनपुट' और 'पैटर्न' तारों को उलट देते हैं, तो matcher.matches (इनपुट) पर कॉल करें - आपको वह चाहिए जो आप चाहते हैं। – Kylar

उत्तर

11

हाँ, जावा कि इसके लिए कोई तरीका प्रदान करता है। सबसे पहले आपको रेगेक्स को लागू करने के लिए मानक विधियों में से एक को कॉल करना होगा, जैसे matches() या find()। कि देता है, तो false, आप अगर कुछ लंबे समय तक स्ट्रिंग मिलान किया जा सकता था पता लगाने के लिए hitEnd() विधि का उपयोग कर सकते हैं:

String[] inputs = { "AA", "BB" }; 
Pattern p = Pattern.compile("AAAAAB"); 
Matcher m = p.matcher(""); 
for (String s : inputs) 
{ 
    m.reset(s); 
    System.out.printf("%s -- full match: %B; partial match: %B%n", 
        s, m.matches(), m.hitEnd()); 
} 

उत्पादन:

AA -- full match: FALSE; partial match: TRUE 
BB -- full match: FALSE; partial match: FALSE 
0

है Matcher.matches() आप क्या चाहते हैं नहीं कर?

+0

वह रिवर्स चाहता है। उनका पैटर्न लंबा स्ट्रिंग है, वह इनपुट मैचों * अब तक * से बाहर निकलना चाहता है। – jwismar

-1

तुम सिर्फ अगर एक स्ट्रिंग कुछ पैटर्न किसी रेगुलर एक्सप्रेशन द्वारा निर्दिष्ट शामिल जाँच करना चाहते हैं:

String s = ...; 
s.matches(regex) 
8

असल में, आप भाग्य में हैं: जावा के regex है विधि आप चाहते हैं:

public boolean hitEnd()

रिटर्न सच अगर en इनपुट के द्वारा इस मैचर द्वारा किए गए अंतिम मैच ऑपरेशन में खोज इंजन द्वारा मारा गया था।

जब यह विधि सत्य हो जाती है, तो यह संभव है कि अधिक इनपुट अंतिम खोज के परिणाम को बदल देगा।

तो अपने मामले में

:

String input="AA"; 
Pattern pat=Pattern.compile("AAB"); 
Matcher matcher=pat.matcher(input); 
System.out.println(matcher.matches()); // prints "false" 
System.out.println(matcher.hitEnd()); // prints "true" 
1

hitEnd के लिए एक वैकल्पिक आरई अपने आप में आवश्यकता को निर्दिष्ट करने के लिए है।

// Accepts up to 5 'A's or 5 'A's and a 'B' (and anything following) 
Pattern pat = Pattern.compile("^(?:A{1,5}$|A{5}B)"); 
boolean yes = pat.matcher("AA").find(); 
boolean no = pat.matcher("BB").find(); 
संबंधित मुद्दे