2012-10-18 12 views
24

एक .NET Regex पैटर्न में, शाब्दिक रूप से उपयोग किए जाने के लिए किन विशेष वर्णों से बचने की आवश्यकता है? http://msdn.microsoft.com/en-us/library/az24scfc.aspx#character_escapes.NET Regex में किस पात्र से बचने की आवश्यकता है?

एक पूरी सूची के साथ समस्या यह है कि यह संदर्भ पर निर्भर करता है:

उत्तर

34

मुझे वर्णों का पूरा सेट नहीं पता - लेकिन मैं वैसे भी ज्ञान पर भरोसा नहीं करता, और मैं इसे कोड में नहीं डालूंगा। इसके बजाय, मैं Regex.Escape का प्रयोग करेंगे जब भी मैं कुछ शाब्दिक पाठ कि मुझे यकीन है कि के बारे में नहीं था:

// Don't actually do this to check containment... it's just a little example. 
public bool RegexContains(string haystack, string needle) 
{ 
    Regex regex = new Regex("^.*" + Regex.Escape(needle) + ".*$"); 
    return regex.IsMatch(haystack); 
} 
+0

$ चरित्र से भी बचें ?: 'var needle = @" कोई पाठ यहां $% # अधिक टेक्स्ट ";' – Kiquenet

+0

@ कुकीन: 'Regex.Escape' पहले से ही ऐसा करता है। –

+2

@ जोन्स स्केट: Regex.Escape को इंगित करने के लिए धन्यवाद, जब तक मैंने आपका जवाब नहीं देखा, तब तक मैं एक स्क्वायर व्हील का पुन: आविष्कार करने वाला था। – mcdon

8

MSDN दस्तावेज़ यहां देखें। उदाहरण के लिए . से बच जाना चाहिए, जब तक यह [.] में ब्रैकेट में संलग्न न हो। ] तकनीकी रूप से बचने की आवश्यकता नहीं है, जब तक कि यह [ से पहले न हो। - का कोई विशेष अर्थ नहीं है, जब तक यह [A-Z] में ब्रैकेट के अंदर न हो। = का कोई विशेष अर्थ नहीं है जब तक कि ? से पहले (?=) में न हो।

11

मुझे लगता है कि आप के रूप में

List<char> chars = Enumerable.Range(0,65535) 
       .Where(i=>((char)i).ToString()!=Regex.Escape(((char)i).ToString())) 
       .Select(i=>(char)i) 
       .ToList(); 

वर्ण की सूची प्राप्त कर सकते हैं -

\t\n\f\r#$()*+.?[\^{| 
17

यहां वर्णों की सूची दी गई है जिन्हें सामान्य अक्षर के रूप में उपयोग करने के लिए बचने की आवश्यकता है:

  1. उद्घाटन वर्ग कोष्ठक [
  2. बैकस्लैश \
  3. कैरट ^
  4. डॉलर चिह्न $
  5. अवधि या डॉट .
  6. कार्यक्षेत्र बार या पाइप प्रतीक |
  7. प्रश्न चिह्न ?
  8. तारांकन या स्टार *
  9. Plus साइन +
  10. पहले दौर ब्रैकेट ( और समापन दौर ब्रैकेट )
  11. खुलने धनुषाकार कोष्ठक {
  12. पाउंड/हैश संकेत #

इन विशेष वर्ण अक्सर "अक्षरों से परे" कहा जाता है ।

लेकिन, मैं कोड में इन वर्णों को हार्डकोड करने के बजाय जॉन के साथ Regex.Escape का उपयोग करने के लिए सहमत हूं।

+5

मुझे लगता है कि आपको अपनी सूची में '{' शामिल करना होगा। – H2ONaCl

+0

और '' '' शामिल करें –