2010-11-11 21 views
35

मैं एक बहु स्ट्रिंग के लिए replaceAll साथ एक समस्या है:जावा regex replaceAll बहु

String regex = "\\s*/\\*.*\\*/"; 
String testWorks = " /** this should be replaced **/ just text"; 
String testIllegal = " /** this should be replaced \n **/ just text"; 

testWorks.replaceAll(regex, "x"); 
testIllegal.replaceAll(regex, "x"); 

testWorks के लिए ऊपर काम करता है, लेकिन testIllegal के लिए नहीं !? वह क्यों है और मैं इसे कैसे दूर कर सकता हूं? मुझे किसी टिप्पणी/* ... */जो कि कई पंक्तियों को फैलाता है, को प्रतिस्थापित करने की आवश्यकता है।

+0

और इस स्ट्रिंग के बारे में क्या: '" स्ट्रिंग एस = \ "/ * \";/* टिप्पणी */"' –

+0

अच्छी बात यह है कि गणित रेगेक्स केवल स्ट्रिंग की शुरुआत में ही मेल खाना चाहिए। अब यह इस तरह दिखता है :(? एस)^\\ s */\\ *। * \\ */यकीन नहीं है कि, अगर इसे अनिच्छुक (? एस)^\\ s */\\ *। *? \\ */ – Robert

उत्तर

59

आप Pattern.DOTALL झंडा उपयोग करने के लिए कहना है कि डॉट नई-पंक्तियों से मेल खाना चाहिए की जरूरत है। जैसे

Pattern.compile(regex, Pattern.DOTALL).matcher(testIllegal).replaceAll("x") 

या (?s) का उपयोग कर पैटर्न में ध्वज निर्दिष्ट करें उदा।

String regex = "(?s)\\s*/\\*.*\\*/"; 
+1

यह सबसे अच्छा समाधान है क्योंकि यह रेगेक्स स्ट्रिंग के साथ स्वयं बातचीत नहीं करता है, आप बस एक ध्वज निर्दिष्ट करते हैं। मुझे यह नहीं पता था, धन्यवाद! – Robert

+1

यदि आपके पास एकाधिक "बहु-पंक्ति" टिप्पणियां हैं, तो यह विधि उन टिप्पणियों के बीच पाठ को भी हटा देगी। इसके बजाय बोरिस द्वारा पोस्ट की गई विधि का प्रयोग करें। – lepe

7

मेटा चरित्र . न्यूलाइन के अलावा किसी अन्य चरित्र से मेल खाता है। यही कारण है कि आपका regex बहु लाइन मामले के लिए काम नहीं करता है।

इस [\d\D] से मेल खाता है न्यू लाइन सहित किसी भी चरित्र के साथ . की जगह ठीक करने के लिए।

Code In Action

+1

'। \ 'के लिए' [\ d \ D] 'में स्वैपिंग (जिसका सामान्य रूप से' पैटर्न [UNIX_LINES' मोड 'में' [^ \ n]' का अर्थ है) मुझे अनुचित के रूप में हमला करता है क्योंकि यह स्पष्ट नहीं है यह क्या कर रहा है, क्योंकि यह 1 के लिए 6 वर्ण है, और क्योंकि ऐसा करने के अन्य तरीके हैं। – tchrist

8

पैटर्न के लिए (?s) संकलन करने के लिए Pattern.DOTALL जोड़ें, या।

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