मैं सामान्य रूप से "foo - bar" के स्ट्रिंग्स को "foo" और "bar" में Pattern.split() का उपयोग करके जावा नियमित अभिव्यक्ति तैयार करने की कोशिश कर रहा हूं। '-' ASCII, उन्हें-डैश, एन-पानी का छींटा, आदि मैं निम्नलिखित नियमित अभिव्यक्ति का निर्माण किया है:: - "" चरित्र कई डैश से एक हो सकताजावा नियमित अभिव्यक्तियों में यूनिकोड डैश मिलान?
private static final Pattern titleSegmentSeparator = Pattern.compile("\\s(\\x45|\\u8211|\\u8212|\\u8213|\\u8214)\\s");
जो, अगर मैं मैं पैटर्न दस्तावेज को सही ढंग से पढ़ रहा हूं, किसी भी यूनिकोड डैश या एसीआई डैश को कैप्चर करना चाहिए, जब दोनों तरफ सफेद जगहों से घिरा हुआ हो। मैं इस प्रकार पैटर्न का उपयोग कर रहा हूं:
String[] sectionSegments = titleSegmentSeparator.split(sectionTitle);
कोई खुशी नहीं। नीचे नमूना इनपुट के लिए, डैश का पता नहीं लगाया गया है, और शीर्षक सेगमेंटसेपरेटर.मैटर (सेक्शनटाइट)। ढूँढें() झूठी रिटर्न देता है!
यह सुनिश्चित करने के लिए कि मुझे कोई असामान्य चरित्र संस्थाएं नहीं मिल रही हैं, मैंने कुछ डीबग जानकारी मुद्रित करने के लिए System.out का उपयोग किया। आउटपुट निम्नानुसार है - प्रत्येक वर्ण के बाद (int) char के आउटपुट का पालन किया जाता है, जो इसका 'यूनिकोड कोड पॉइंट होना चाहिए, नहीं?
नमूना इनपुट:
अध्ययन सारांश (10 में 1) - प्रतियोगिता
एस (83) टी (116) यू (117) घ (100) y (121) (32) एस (83) यू (117) एम (109) एम (109) ए (9 7) आर (114) वाई (121) (32) ((40) 1 (4 9) (32) ओ (111) एफ (102)) (32) 1 (4 9) 0 (48)) (41) (32) - (8211) (32) सी (67) ओ (111) एम (109) पी (112) ई (101) टी (116) i (105) टी (116) i (105) ओ (111) एन (110)
यह मुझे लगता है कि डैश कोडपॉइंट 8211 है, जिसे रेगेक्स द्वारा मेल किया जाना चाहिए, लेकिन यह नहीं है! यहाँ क्या चल रहा है?
डॉक्स से: "तार" \ u2014 "और" \\ u2014 ", जबकि बराबर नहीं, एक ही पैटर्न है, जो हेक्साडेसिमल मान 0x2014 साथ अक्षर से मेल खाता में संकलित। " यही है, आप अपनी अभिव्यक्ति में डबल \\ को हटा सकते हैं। – aioobe
@aioobe: जावा डॉक्स ने एक उदाहरण के रूप में वास्तव में एक चरित्र का उपयोग किया है कि यह सवाल इस बारे में है कि यह एक बड़ा संयोग है। या आप उद्धरण modifiy किया था? –
संयोग :-) – aioobe