2010-05-07 15 views
16

क्या ^[a-zA-Z] और [^a-zA-Z] के बीच कोई अंतर है?नियमित अभिव्यक्ति "^ [ए-जेए-जेड]" या "[^ ए-जेए-जेड]"

जब मैं सी # में जाँच,

Regex.IsMatch("t", "^[a-zA-Z]") // Returns true (I think it's correct) 

Regex.IsMatch("t", "[^a-zA-Z]") // Returns false 

वर्णमाला के लिए [^a-zA-Z] का उपयोग कर वेब साइटों की एक बहुत कुछ कर रहे हैं। मुझे सच में यकीन नहीं है कि कौन सा सही जवाब है।

+0

आपके उत्तरों के लिए बहुत बहुत धन्यवाद। अब मुझे स्पष्ट दिख सकता है। – Win

+9

बारिश चली गई है! – tloflin

+2

बीटीडब्ल्यू, सी # में नियमित अभिव्यक्ति नहीं है। .NET Framework करता है। –

उत्तर

55

हां, पहला मतलब है "एक अक्षर से शुरू होने वाले सभी तारों से मेल खाता है", दूसरा माध्यम "सभी तारों से मेल खाता है जिनमें एक गैर-अक्षर होता है"। देखभाल ("^") का प्रयोग दो अलग-अलग तरीकों से किया जाता है, एक पाठ की शुरुआत को संकेत देने के लिए, एक स्क्वायर ब्रैकेट के अंदर एक चरित्र मैच को अस्वीकार करने के लिए।

+1

+1 दोनों दुनिया के सर्वश्रेष्ठ - संक्षिप्त और सही। – Dathan

5

एक अंतर है।

जब ^ चरित्र [] के बाहर दिखाई देता है तो रेखा (या स्ट्रिंग) की शुरुआत से मेल खाता है। जब ^ वर्ण [] के अंदर प्रकट होता है, तो यह [] के अंदर दिखाई देने वाले किसी भी चरित्र से मेल नहीं खाता है।

9

^[a-zA-Z] एक लाइन

[^a-zA-Z] के शुरू में किसी भी az या AZ का मतलब है किसी भी चरित्र है कि az नहीं है या AZ

3

^चरित्र वर्ग के बाहर ("[a-zA-Z]" का अर्थ है) नोट करता है कि यह ऑपरेटर के साथ "शुरू होता है" है।
^ चरित्र के अंदर निर्दिष्ट कक्षा को अस्वीकार करता है।

तो, "^ [ए-जेए-जेड]" अनुवाद "एज़ या एजेड से चरित्र के साथ शुरू होता है" और "[^ ए-जेए-जेड]" अनुवाद करता है "या तो एज़ या एजेड नहीं है"

यहां एक त्वरित संदर्भ है: http://www.regular-expressions.info/reference.html

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