1
System.Text.RegularExpressions名前空間は、入力文字列が( "abc [0-9]"または "^ aeiou $")、または(abc123)のメタ文字を持っていないかどうかを知ることができますか?または、特定のリストのエスケープされていない文字を手動でチェックする必要がありますか?文字列に正規表現のメタ文字が含まれているかどうかを調べる方法は? (C#)
System.Text.RegularExpressions名前空間は、入力文字列が( "abc [0-9]"または "^ aeiou $")、または(abc123)のメタ文字を持っていないかどうかを知ることができますか?または、特定のリストのエスケープされていない文字を手動でチェックする必要がありますか?文字列に正規表現のメタ文字が含まれているかどうかを調べる方法は? (C#)
あなたは、少なくとも3つのオプションがあります。
使用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);
}
はエスケープ値が異なるかどうかを確認するために、各文字に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;
}
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を決して使用しない場合は、メタスペースとしてスペースを削除できます。
SWEET!ありがとう!ちなみにここではエチケットの中の人に感謝していますか、それとも不要なノイズと考えられていますか? – JCCyC
私はコメントが大丈夫だと思う:)喜んで助けることができる –
.netの正規表現エンジンで深いダイビングをしたとき、私はこの方法に遭遇した:http://www.moserware.com/2009/03/how-net- regularular -expressions-really-work.html –