2009-06-07 17 views
11

जावा में, क्या किसी भी तरफ नियमित अभिव्यक्ति डिलीमीटर को निर्दिष्ट करके एक सबस्ट्रिंग निकालने का एक आसान तरीका है, जिसमें अंतिम सबस्ट्रिंग में डिलीमीटर शामिल हैं?जावा स्ट्रिंग - दो नियमित अभिव्यक्तियों के बीच सब कुछ प्राप्त करें (लेकिन शामिल नहीं)?

उदाहरण के लिए

, अगर मैं इस तरह की एक स्ट्रिंग है:

<row><column>Header text</column></row> 

सबसे आसान तरीका है-स्ट्रिंग को निकालने के लिए है क्या:

Header text 

कृपया ध्यान दें कि स्ट्रिंग लाइन ब्रेक हो सकती है ..

धन्यवाद!

उत्तर

24

इस तरह एक regex लिखें:

"(regex1)(.*)(regex2)" 

... और (अपने पैटर्न में नई-पंक्तियों आप Pattern.DOTALL उपयोग करना चाहते हैं संभाल करने के लिए) मिलान से मध्य समूह बाहर खींच।

अपने उदाहरण का उपयोग हम जैसे किसी प्रोग्राम लिख सकते हैं:

package test; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Regex { 

    public static void main(String[] args) { 
     Pattern p = Pattern.compile(
       "<row><column>(.*)</column></row>", 
       Pattern.DOTALL 
      ); 

     Matcher matcher = p.matcher(
       "<row><column>Header\n\n\ntext</column></row>" 
      ); 

     if(matcher.matches()){ 
      System.out.println(matcher.group(1)); 
     } 
    } 

} 

कौन सा जब प्रिंट रन आउट:

Header 


text 
+0

@ एडम ... यह केवल इसलिए है क्योंकि मुझे उदाहरण प्राप्त करने के लिए एक्लिप्स को आग लगाना था और जल्दी से जवाब देना चाहता था;) –

+0

@Aaron: काफी मेला। मैं तब भी अपनी पहली टिप्पणी हटा सकता हूं :) अच्छा जवाब। – bernie

+0

@Aaron - धन्यवाद, आपका उदाहरण काम करता है! लेकिन कृपया आप मुझे बता सकते हैं कि इस तरह की स्ट्रिंग से एक ही पाठ निकालने के लिए नियमित अभिव्यक्ति पैटर्न का उपयोग करने के लिए क्या उपयोग किया जा सकता है, जिसमें कुछ एकल उद्धरण शामिल हैं? <स्तंभ नाम = 'शीर्षक'> शीर्षक \ n \ n \ ntext मैं पैटर्न पी = Pattern.compile ( "<स्तंभ नाम = 'शीर्षक'> (का उपयोग कर की कोशिश की है। *) ", पैटर्न। डॉटल ); और वही लेकिन उद्धरण के सामने बैकस्लाश के साथ, लेकिन न तो काम। क्षमा करें, मैं नियमित अभिव्यक्तियों के लिए बहुत नया हूं, सहायता की सराहना करता हूं। फिर से धन्यवाद! अन्ना –

2

आप रेगुलर एक्सप्रेशन का उपयोग नहीं करना चाहिए एक्सएमएल डिकोड करने के लिए - यह अंत में अगर टूट जाएगा इनपुट कड़ाई से नियंत्रित नहीं है।

सबसे आसान बात शायद डीओएम पेड़ में एक्सएमएल को पार्स करने के लिए है (जावा 1.4 और नए में एक्सएमएल पार्सर सीधे होता है) और फिर आपको जो चाहिए उसे चुनने के लिए पेड़ पर नेविगेट करें।

शायद आप यह बताना चाहते हैं कि आप अपने कार्यक्रम के साथ क्या हासिल करना चाहते हैं?

+1

+1 आप अपने इच्छित बिट्स को निकालने के लिए XPath का उपयोग कर सकते हैं। –

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