System.Text.RegularExpressions命名空间是否为我提供了任何可以发现输入字符串是否具有(“abc [0-9]”或“^ aeiou $”)或者没有(“abc123”)元字符的内容?或者我是否必须手动检查某个列表中的非转义字符?
答案 0 :(得分:5)
您至少有三个选择:
使用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;
}
根据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;
}
第三种方法提供更多控制,具体取决于您在Regex中使用的RegexOptions。例如,如果您永远不会使用RegexOptions.IgnorePatternWhitespace,则可以将空格删除为元数据。