2011-07-05 7 views
46

: ("पेट") regexp में एक विशेष अर्थ नहीं है लेकिन मैं इसी रूप में इसका उपयोग करने के लिए, की तरह [A-Za-z0-9.,-:]* मैं इसे से बचने के लिए कोशिश की है की जरूरत है, लेकिन यह काम नहीं करता [A-Za-z0-9.,-\:]*regexp में ":" ("colon") टाइप कैसे करें?

+4

हो सकता है कि आप इसे से बचने के लिए दो बैकस्लैश की ज़रूरत है? – Mehrdad

+0

आप क्या मिलान करने की कोशिश कर रहे हैं? –

उत्तर

86

सबसे regex कार्यान्वयन (जावा के सहित) में, : न अंदर है और न ही एक चरित्र वर्ग के बाहर कोई विशेष अर्थ नहीं है,।

आपकी समस्या तथ्य अपनी कक्षा में एक सीमा के ऑपरेटर के रूप में - कृत्यों की वजह से सबसे अधिक संभावना है:

[A-Za-z0-9.,-:]* 

जहां ',' और ':' के बीच ,-: मैचों सभी ASCII वर्ण। ध्यान दें कि यह अभी भी शाब्दिक ':' से मेल खाता है!

ऐसा करें:

[A-Za-z0-9.,:-]* 

प्रारंभ या वर्ग के अंत में - रखने से, यह शाब्दिक "-" मेल खाता है। के रूप में Keoki ज़ी द्वारा टिप्पणी में उल्लेख किया है, आप भी - वर्ग के अंदर बच सकते हैं, लेकिन अधिकांश लोगों को बस अंत में जोड़ें।

एक डेमो:

public class Test { 
    public static void main(String[] args) { 
     System.out.println("8:".matches("[,-:]+"));  // true: '8' is in the range ','..':' 
     System.out.println("8:".matches("[,:-]+"));  // false: '8' does not match ',' or ':' or '-' 
     System.out.println(",,-,:,:".matches("[,:-]+")); // true: all chars match ',' or ':' or '-' 
    } 
} 
+2

आप बैकस्लैश के साथ हाइफ़न से भी बच सकते हैं, '[a \ -z] '। –

+1

@ केकोकी: सच है, हालांकि मुझे जितना संभव हो उतना बचने के लिए स्पष्ट रूप से (जावा स्ट्रिंग अक्षर के अंदर डबल से बचने के लिए स्पष्ट लगता है!)। फिर भी, यह उल्लेख करना अच्छा है कि एक _can_ इसे भी बचें। –

+3

अंत में हाइफ़न रखना शायद पिछले प्रोग्रामर ने किया था, जिसने इस त्रुटि को जन्म दिया। मैं * हमेशा * इसे से बचता हूं: चक्र को समाप्त करें ':) ' – Kobi

4

बृहदान्त्र नहीं है एक चरित्र वर्ग में विशेष अर्थ है और भागने की जरूरत नहीं है।

सभी गैर अक्षरांकीय अक्षर अन्य \ से, -, ^ (शुरू में) और समाप्त ] हैं: the PHP regex docs के अनुसार, केवल पात्रों की जरूरत है कि अनुसरण कर रहे हैं एक चरित्र वर्ग में भाग निकले जा करने के लिए चरित्र वर्गों में गैर विशेष है, लेकिन यह कोई नुकसान नहीं अगर वे भाग निकले कर रहे हैं नहीं करता है।

जावा नियमित अभिव्यक्तियों के बारे में अधिक जानकारी के लिए, the docs देखें।

+0

मुझे समझ नहीं आता क्यों यह एक downvote मिला है, किसी को क्या इस जवाब के साथ गलत हो सकता है कृपया मुझे समझा सकता है? –

+2

मैंने वोट नहीं दिया लेकिन शायद क्योंकि आप जावा रेगेक्स दस्तावेज़ में जावा रेगेक्स दस्तावेज़ को लिंक करते हैं? – hcpl

1

के बजाय \\: का उपयोग करें .. \ जावा तारों में विशेष अर्थ है।

+2

हालांकि यह सच है कि बैकस्लैश जावा स्ट्रिंग्स में एक एस्केप कैरेक्टर है, बैकस्लैश से बचने से समस्या हल नहीं होगी, क्योंकि '' 'वैसे भी रेगेक्स में एक विशेष char नहीं है। –

7

सावधान रहें, - regexp के साथ एक विशेष अर्थ नहीं है। एक [] में, आप इसे समस्या बिना रख सकते हैं अगर यह अंत पर रखा गया है। आपके मामले में, ,-: को , से : पर लिया गया है।

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