2012-10-03 13 views
6

एंड्रॉइड प्लेटफार्म 2.2.3 को लक्षित करते समय मुझे नियमित अभिव्यक्ति के साथ परेशानी हो रही है।एंड्रॉइड वैकल्पिक शब्द सीमा regex

निम्नलिखित डेस्कटॉप अभिव्यक्ति मेरे डेस्कटॉप पर जावा वीएम को लक्षित करते समय काम करती है और नियमित अभिव्यक्ति भी .NET अनुप्रयोग पर भी काम कर रही है।

Pattern.compile("\\b?") 

लेकिन जब मैं अपने फोन को लक्षित करता हूं तो मुझे एक पैटर्न सिंटैक्स अपवाद मिलता है। कोई विचार?

+0

त्रुटि की प्रेरणा नहीं पता ... लेकिन यह एक वैकल्पिक (और हालांकि शून्य लंबाई) शब्द सीमा है ... आप क्या हैं सब के बाद मैच करने जा रहा है ?? – Gabber

+0

वैसे यह एक अलग परियोजना से एक जटिल रेगेक्स है। लेकिन मुझे नहीं लगता कि एक वैकल्पिक शब्द सीमा अमान्य पैटर्न वाक्यविन्यास क्यों होनी चाहिए। – Tentux

उत्तर

4

मैं पुष्टि कर सकता हूं कि यह एंड्रॉइड एमुलेटर में चलते समय PatternSyntaxException फेंक देता है, लेकिन नियमित जावा एप्लिकेशन में नहीं। मैं नहीं देख सकता कि यह मामला क्यों होगा, इस तथ्य के अलावा कि एंड्रॉइड में नियमित अभिव्यक्ति कार्यान्वयन सामान्य जावा एसडीके से अलग है। Pattern एंड्रॉइड डेवलपर्स पेज से:

एंड्रॉइड में उपयोग की जाने वाली नियमित अभिव्यक्ति कार्यान्वयन आईसीयू द्वारा प्रदान की जाती है। नियमित अभिव्यक्तियों के लिए नोटेशन ज्यादातर जावा भाषा कार्यान्वयन में उपयोग किए जाने वालों का एक सुपरसेट है। इसका मतलब यह है कि मौजूदा एप्लिकेशन आम तौर पर अपेक्षित काम करेंगे, लेकिन दुर्लभ मामलों में एंड्रॉइड एक नियमित अभिव्यक्ति स्वीकार कर सकता है जो अन्य कार्यान्वयन द्वारा स्वीकार नहीं किया जाता है।

एक काम के आसपास के रूप में, मुझे पता चला कि आप एक गैर-कैप्चरिंग समूह में शब्द सीमा सम्मिलन को संलग्न करके अपवाद के आसपास हो सकते हैं।

Pattern.compile("(?:\\b)?"); 

(एक कैप्चरिंग समूह के रूप में अच्छी तरह से काम करता है, लेकिन मुझे शक है कि आप इसे की जरूरत है।)

मैं तुम्हें report this as a bug सुझाव है यदि आप कोई आधिकारिक प्रतिक्रिया प्राप्त कर सकते हैं देखने के लिए। (मैंने पहले ही खोजा है, और यह अभी तक रिपोर्ट नहीं किया जा रहा है।)

+1

लेकिन ध्यान रखें कि यह केवल एक बग है कि एंड्रॉइड कुछ regexes को अस्वीकार करता है कि संदर्भ कार्यान्वयन स्वीकार करता है। शून्य-चौड़ाई के दावे को शामिल करने के लिए यह बिल्कुल कोई समझ नहीं आता है और फिर इसे वैकल्पिक बना देता है। आप कह रहे हैं, * इस स्थिति को सच रखना चाहिए, लेकिन यह ठीक है अगर यह नहीं करता है। * इसे अस्वीकार कर, संकलक आपको एक टाइपो या लेखक के हिस्से पर समझने में विफलता के बारे में चेतावनी दे रहा है। –

+1

@AlanMoore मैं कल्पना करने की कोशिश कर रहा था कि बाकी ओपी के रेगेक्स को वैकल्पिक शब्द सीमा की आवश्यकता हो सकती है, लेकिन मुझे लगता है कि आप सही हैं। यह समझ में नहीं आता है। जिस तरह से आप शब्द सीमा वैकल्पिक बनाते हैं, वह इसे रेगेक्स में शामिल नहीं करना है। –

+0

@ बिलथ्लिज़र सहमत हुए। मुझे नहीं लगता कि यह समझ में आता है। मैं मूल regex के लेखक नहीं हूँ। शायद मैंने उनके उपयोग को गलत समझा? संभावित रूप से एक कैप्चर समूह का हिस्सा हो सकता है। वैसे भी, मैंने अपने रास्ते को उसी समाधान को लागू करने का निर्णय लिया है। – Tentux

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