2015-10-22 8 views
7

पर काम नहीं कर रहा है मेरे पास लाइन और शुरुआत के संकेत को इंगित करने के लिए^और $ का उपयोग करके एक पैटर्न है।

Pattern pattern = Pattern.compile("^Key2 = (.+)$"); 

और इनपुट इस तरह:

String text = "Key1 = Twas brillig, and the slithy toves" 
    + "\nKey2 = Did gyre and gimble in the wabe." 
    + "\nKey3 = All mimsy were the borogroves." 
    + "\nKey4 = And the mome raths outgrabe."; 

लेकिन pattern.matcher(text).find() रिटर्न false

यह काम नहीं करना चाहिए? Pattern class documentation में, सारांश निर्दिष्ट करता है:

 
Boundary matchers 
^ The beginning of a line 
$ The end of a line 

उत्तर

9

डिफ़ॉल्ट रूप से, उन प्रतीकों शुरुआत और पूरे इनपुट अनुक्रम के अंत से मेल खाते हैं।

इसके अलावा कि same Pattern class documentation में नीचे (जोर देने के साथ जोड़ा):

डिफ़ॉल्ट रूप से, नियमित अभिव्यक्ति^और $ शुरुआत और अंत, पर लाइन टर्मिनेटर्स और केवल मैच क्रमश: उपेक्षा पूरे इनपुट के अनुक्रम। यदि मल्टीलाइन मोड सक्रिय होता है तो इनपुट की शुरुआत में और इनपुट के अंत को छोड़कर किसी लाइन टर्मिनेटर के बाद मिलान होता है। जब मल्टीलाइन मोड में $ लाइन टर्मिनेटर या इनपुट अनुक्रम के अंत से पहले $ मैच होता है।

तो तुम^और $ काम कर सकते हैं के रूप में वे Pattern.MULTILINE साथ पैटर्न संकलन के द्वारा सारांश तालिका में दर्ज किया जाता है:

Pattern pattern = Pattern.compile("^Key2 = (.+)$", Pattern.MULTILINE); 
+0

शानदार :) मैं इस के साथ अपने आप को अतीत – AbtPst

+1

@AbtPst में संघर्ष किया है - खुद भी जावाडोक में ब्योरा दफनाया जाता है; सारांश एक संक्षिप्त स्पष्टीकरण का उपयोग कर सकता है। मैंने वर्षों से इस कई बार सामना किया है, हल किया है, और भूल गया है। अगली बार यह stackoverflow सवाल होगा! –

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