2012-11-12 16 views
5

में मैं निम्नलिखित के लिए एक regex खोजने की कोशिश कर रहा हूँ:जावा और lookbehind regex

सभी @[email protected] मिलान दुनिया कहां WORD किसी भी शब्द हो सकता है सब पर है, लेकिन केवल एक = के बाद कर रहे हैं। मैं निम्नलिखित बनाया:
(?<==)#.*?#) जो केवल [email protected]@ या @[email protected] लेकिन = @[email protected] के लिए नहीं की तरह पैटर्न के लिए, लेकिन काम करता है।
मुझे में = के बाद भी दिलचस्पी है, लेकिन इसका पता नहीं लगा सका।
वैसे भी कुछ का उपयोग कर: (?<=\\s*=\\s*)#.*?#) लेकिन यह काम नहीं करता है।
कोई विचार?

नोट: अजीब लेकिन here से यह कहा गया है कि चर लंबाई lookbehind नहीं जावा में समर्थित है, लेकिन यह मेरे लिए एक अपवाद

उत्तर

0

यह पैटर्न एक बराबरी से मेल खाता है, अतिरिक्त स्थान के द्वारा पीछा किया और एक शब्द encased नहीं देता @ प्रतीकों में:

Pattern pattern = Pattern.compile("= [email protected](.*)@"); 
Matcher matcher = pattern.matcher("[email protected]@"); 
if (matcher.matches()) { 
    System.out.println(matcher.group(1)); 
} 

// Prints: "WORD" 

नहीं, एक lookbehind के लिए एक की जरूरत को देख सकते हैं जब तक कि मैं काम आप पूरा करना चाहते हैं गलत समझा गया है। हालांकि, निम्नलिखित काम करना चाहिए:

Pattern pattern = Pattern.compile("(?<== ?)@(.*)@"); 
Matcher matcher = pattern.matcher("= @[email protected]"); 
if (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

// Prints: "WORD" 

नकारात्मक पैटर्न तो पूरा किया है इस प्रकार है:

Pattern pattern = Pattern.compile("(?<!= ?)@(.*)@"); 
Matcher matcher = pattern.matcher("[email protected]@"); 
System.out.println(matcher.find()); 

// Prints: "false" 
1

आप उपयोग कर रहे हैं देखो-पीछे, मैं तुम्हें Pattern और Matcher सीधे उपयोग कर रहे हैं यह सोचते हैं रहा हूँ, "= @[email protected]" के बजाय शब्दों को साफ़ करने के लिए ("@[email protected]")।

हैं कि वास्तव में मामला है, तुम सब करने की जरूरत है में एक वैकल्पिक सफेद-अंतरिक्ष जोड़ने के लिए लुक-पीछे:

(?<==\\s?)@.*[email protected]


यहाँ एक परीक्षण कोड, "@[email protected]" लौटने है :

Matcher m = Pattern.compile("(?<==\\s?)@.*[email protected]").matcher("= @[email protected]"); 
m.find(); 
System.out.println(m.group()); 
संबंधित मुद्दे