2009-06-18 2 views

答えて

5

あなたは、少なくとも3つのオプションがあります。

  1. 使用Regex.Escapeをし、結果を比較:

    private static bool ContainsMetaCharacters(string s) 
    { 
        if (String.IsNullOrEmpty(s)) 
        { 
         return false; 
        } 
        string escaped = Regex.Escape(s); 
        return !escaped.Equals(s, StringComparison.Ordinal); 
    } 
    
  2. はエスケープ値が異なるかどうかを確認するために、各文字にRegex.Escapeを適用します。

    private static bool ContainsMetaCharacters(string s) 
    { 
        if (String.IsNullOrEmpty(s)) 
        { 
         return false; 
        } 
        for (int i = 0; i < s.Length; i++) 
        { 
         if (Regex.Escape(s.Substring(i,1))[0] != s[i]) 
         { 
          return true; 
         } 
        } 
        return false; 
    } 
    
  3. o WN metacharsは変更されないという事実に基づいて:

    private static readonly char[] _MetaChars = 
        new char[] 
        { '\t', '\n', '\f', '\r', 
         ' ', '#', '$', '(', ')', 
         '*', '+', '.', '?', 
         '[', '\\', '^', '{', '|' }; 
    
    private static bool ContainsMetaCharacters(string s) 
    { 
        if(String.IsNullOrEmpty(s)) 
        { 
         return false; 
        } 
        return s.IndexOfAny(_MetaChars) >= 0; 
    } 
    

第三のアプローチは、あなたの正規表現で使用RegexOptionsに応じて、より多くの制御を提供しています。たとえば、RegexOptions.IgnorePatternWhitespaceを決して使用しない場合は、メタスペースとしてスペースを削除できます。

+0

SWEET!ありがとう!ちなみにここではエチケットの中の人に感謝していますか、それとも不要なノイズと考えられていますか? – JCCyC

+0

私はコメントが大丈夫だと思う:)喜んで助けることができる –

+0

.netの正規表現エンジンで深いダイビングをしたとき、私はこの方法に遭遇した:http://www.moserware.com/2009/03/how-net- regularular -expressions-really-work.html –

関連する問題