2013-05-20 7 views
6

मैंने पाया this धागा और उस पर उन में से एक में निम्न कोड पंक्ति तैनात:जावा Regex अक्षरों से परे

String[] digits2 = number.split("(?<=.)"); 

मैं 1 और 2 तरह sources- के एक जोड़े सलाह ली समझने करने वाली है कि इस कोड का मतलब लेकिन मेरे द्वारा इसका निर्धारण नहीं किया जा सकता। क्या कोई बता सकता है कि विभाजन() विधि में तर्क क्या है?

संपादित: किसी को भी, जो एक ही सवाल मैं था के रूप में है के लिए, यहाँ एक और उपयोगी link

उत्तर

4

यह एक positive lookbehind है। समग्र अभिव्यक्ति का अर्थ है "किसी भी चरित्र के बाद, लेकिन कुछ भी कैप्चर किए बिना"। अनिवार्य रूप से, स्ट्रिंग लग रहा है, तो जैसे

ABC 

तो मैचों | पर घटित होता, वर्णों के बीच।

A|B|C| 
+0

मुझे पता है कि "।" लाइन ब्रेक को छोड़कर किसी भी चरित्र से मेल खाता है, लेकिन इस संदर्भ में "<=" का क्या अर्थ है? – Haque1

+1

@ Haque1 यह मेटाएक्टैक्टर्स का एक अनुक्रम है जो अभिव्यक्ति को बताता है कि "।" * कुछ भी * कब्जा नहीं करना चाहिए। इंजन को यह देखने की ज़रूरत है कि एक चरित्र वहां है, लेकिन इसे धारा से उस चरित्र को नहीं हटाया जाना चाहिए। – dasblinkenlight

+1

@ Haque1 यह देखने के असामान्य उपयोग है। एक और आम तरीका इस प्रकार है: '(? <= टैग :)" [^ "] *" '। यह अभिव्यक्ति केवल उद्धृत स्ट्रिंग से मेल खाती है जब यह 'टैग:' स्ट्रिंग से पहले होती है। – dasblinkenlight

1

.split("") (कोई रिक्त स्ट्रिंग/तर्ज पर) regex के शुरू में रिक्त स्ट्रिंग से मेल खाएगी। यह एक अतिरिक्त खाली स्ट्रिंग वर्ण है जो अवांछित है। (?<=.) शून्य-चौड़ाई वाला दावा है (किसी भी वर्ण का उपभोग नहीं करता है) जो किसी भी वर्ण के बाद शून्य-चौड़ाई वाली जगह से मेल खाता है (इसके बाद यह एक लुकबींड है)। यह प्रत्येक चरित्र के बीच खाली स्ट्रिंग पर विभाजित होता है, लेकिन पहले वर्ण और स्ट्रिंग की शुरुआत के बीच खाली स्थान नहीं है।

+0

शून्य-चौड़ाई वाली जगह है यहां उपयोग करने के लिए गलत शब्द; यह [एक अलग बात] है (http://en.wikipedia.org/wiki/Zero-width_space) – Cairnarvon

+0

@Cairnarvon इस बात को इंगित करने के लिए धन्यवाद ... आप किस शब्द को पसंद करेंगे? –

+0

I "चरित्र सीमा" कहना चाहते हैं, लेकिन यह सख्ती से सही नहीं है। मुझे यकीन नहीं है, ईमानदार होना। – Cairnarvon

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