2010-04-25 14 views
7

जावा नियमित अभिव्यक्ति में मैं "पहले से नहीं" कैसे व्यक्त कर सकता हूं? उदाहरण के लिए मैं ":" खोजना चाहता हूं लेकिन केवल तभी जब यह सीधे "\" से पहले नहीं है। मैं यह कैसे कर सकता हूँ?मैं जावा नियमित अभिव्यक्ति में "" से पहले "" कैसे अभिव्यक्त करूं?

उत्तर

14

उपयोग एक negative lookbehind:

"(?<!\\\\):" 

चार बैकस्लैश के लिए कारण है:

  • बैकस्लैश नियमित अभिव्यक्ति में विशेष वर्ण ताकि आप एक ही बैकस्लैश मैच के लिए नियमित अभिव्यक्ति \\ की जरूरत है ।
  • बैकस्लैश जावा स्ट्रिंग्स में से बच जाना चाहिए, इसलिए उपर्युक्त बैकस्लैश में से प्रत्येक को \\ के रूप में लिखा जाना चाहिए, जिसमें कुल चार दे सकते हैं।

उदाहरण कोड:

Pattern pattern = Pattern.compile("(?<!\\\\):"); 
Matcher matcher = pattern.matcher("foo\\:x bar:y"); 
if (matcher.find()) { 
    System.out.println(matcher.start()); 
} 

आउटपुट:

10 
1

क्या आप पूरक ऑपरेटर के साथ एक चरित्र वर्ग का उपयोग करके देखें?

String s1 = "foo : bar"; 
    String s2 = "foo \\: bar"; 

    Pattern p = Pattern.compile("[^\\\\]:"); 

    Matcher m = p.matcher(s1); 
    if(m.find()) { 
     System.out.println(m.group()); 
    } 

    m = p.matcher(s2); 
    if(m.find()) { 
     System.out.println(m.group()); 
    } 
+0

यह स्ट्रिंग की शुरुआत में ':' से मेल खाने में विफल रहता है। – polygenelubricants

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