2015-05-06 12 views
6

मैं tutorial के माध्यम से रेगेक्स जाने के लिए नया हूं, मुझे रेगेक्स [...]Matches any single character in brackets. कहता है। इसलिए मैं[...] regex का अर्थ क्या है?

System.out.println(Pattern.matches("[...]","[l]")); 

की कोशिश की मैं भी कोष्ठक

System.out.println(Pattern.matches("[...]","\\[l\\]")); 

भागने की कोशिश की लेकिन यह मुझे false मैं true की उम्मीद है क्योंकि l अंदर कोष्ठक है देता है।

अगर कोई मेरे संदेह को साफ़ करता है तो यह सहायक होगा।

+2

कोष्ठक match.If का एक हिस्सा आप मैच के लिए 'चाहते नहीं होगा [एल] 'उपयोग करें \\ [एल \\]' – vks

+0

इसके अलावा: ... तीन पात्रों की अपेक्षा करता है। – Stultuske

+4

@Stultuske यह '3' वर्णों की अपेक्षा नहीं करता ........ यह सिर्फ उन में से एक है जो – vks

उत्तर

4

वर्ण कि [ और ] अंदर हैं प्रमुख (नामक एक character class) छोड़कर वर्णों का एक सेट, से चुनने के लिए रूप में माना जाता^ जो परिणाम को नकारता और - जो सीमा का मतलब है (यह दो वर्णों के बीच है)। उदाहरण:

  • [-123] मैचों -, 1, 2 या 3
  • [1-3] को सीमा 1 में अंकों की किसी भी छोड़कर 1 से 3
  • [^1-3] मैचों किसी भी चरित्र रेंज में एक एकल अंक से मेल खाता है 3
  • . मैचों किसी भी चरित्र
  • [.].

से मेल खाता है डॉट आप स्ट्रिंग [l] मैच के लिए आप करने के लिए अपने regex बदलना चाहिए चाहते हैं:

System.out.println(Pattern.matches("...", "[l]")); 

अब यह true प्रिंट करता है।

रेगेक्स [...] regexes \. और [.] के बराबर है।

+0

@timpietzcker - मेरे उत्तरों को बेहतर दिखता है :) – Maroun

+0

मुझे लगता है कि * एलन * सही है .. ओपी जानता है कि क्या [...] 'मतलब है .. तो, आपका जवाब * अधिक सही * है। उसे शायद गहराई में * regexes को देखना चाहिए * :) – TheLostMind

+0

@TheLostMind ट्यूटोरियल को इस से बेहतर प्लेसहोल्डर का उपयोग करना चाहिए, यह नए आने वालों के लिए बहुत भ्रमित है। – Maroun

4

ट्यूटोरियल एक छोटे से भ्रामक है, यह कहते हैं:

[...] कोष्ठक में किसी भी एक वर्ण से मेल खाता है।

हालांकि इसका मतलब यह है कि रेगेक्स ब्रैकेट के अंदर किसी भी पात्र के खिलाफ एक ही चरित्र से मेल खाएगा। ... का अर्थ है "उन अक्षरों को सम्मिलित करें जिन्हें आप यहां मिलान करना चाहते हैं"। इसलिए आपको उन पात्रों के साथ प्रतिस्थापित करने की आवश्यकता है जिन्हें आप मिलान करना चाहते हैं।

उदाहरण के लिए, [AP]M "एएम" और "पीएम" के खिलाफ मेल खाएगा।

यदि आपका रेगेक्स सचमुच [...] है तो यह एक शाब्दिक बिंदु के खिलाफ मेल खाता है। ध्यान दें ब्रैकेट के अंदर कोई बिंदु दोहराने वाले वर्ण नहीं हैं।

2

ट्यूटोरियल कह रहा है:

कोष्ठक में किसी भी एक वर्ण से मेल खाता है।

इसका मतलब है कि आप एक ही चरित्र के साथ ... की जगह है, उदाहरण के [l]

के लिए ये सच प्रिंट होगा:

System.out.println(Pattern.matches("[l]","l")); 
System.out.println(Pattern.matches("[.]",".")); 
System.out.println(Pattern.matches("[.]*",".")); 
System.out.println(Pattern.matches("[.]*","......")); 
System.out.println(Pattern.matches("[.]+","......")); 
+1

'[...]' एक वैध regex है। इसे * [।] 'तक सरलीकृत किया जा सकता है, लेकिन यह निश्चित रूप से मान्य है। – Maroun

+0

सही, धन्यवाद – jaypi

+0

@MarounMaroun, मुझे लगता है कि वह मेरे (अब हटाए गए) टिप्पणी में जो कहा है, कहने की कोशिश कर रहा था: कि वे वास्तविक regex '[...]' के बारे में बात नहीं कर रहे हैं। हालांकि, जवाब अभी भी थोड़ा उलझन में है। मुझे लगता है कि डॉट्स से पूरी तरह से छुटकारा पाने और अपने उत्तर में यथार्थवादी उदाहरणों का उपयोग करना बेहतर है। –

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