c# - Microsoft asp c# RegEx 转义多个保留字符

标签 c# asp.net regex string escaping

我只想使用正则表达式,如果字符串中存在一个不是常规可键入字符的字符,它将返回 true/false。这应该是一件容易的事情,不是吗?

我没有模式,我只是想知道是否存在任何不在列表中的字符。

在常规的 RegEx 世界中,我只是:

[^0-9a-zA-Z~`!@#$%\^ &*()_-+={\[}]|\\:;\"'<,>.?/] // <space> before the ampersand

...我知道有点臃肿,但为这篇文章指出了重点...

我发现您无法转义多个保留字符。 例如,Regex ex = Regex.Escape("[") + Regex.Escape("^") 不会命中: “st[前夕”或“st^ve”

如下失败:

    string ss = Regex.Escape("[") + Regex.Escape("^");
    Regex rx = new Regex(ss);
    string s = "st^eve";
    rx.IsMatch(s));

还有以下任何一项:

    string ss = Regex.Escape("[") + "[0-9]";
    Regex rx = new Regex(ss);
    string s1 = "st^eve"; rx.IsMatch(s1));
    string s2 = "st^ev0e; rx.IsMatch(s2));
    string s3 = "stev0e;  rx.IsMatch(s3));

但这是唯一不会失败的 Microsoft c# 正则表达式转义字符的使用:

    string ss = Regex.Escape("^");
    Regex rx = new Regex(ss);
    string s = "st^eve"; rx.IsMatch(s));

除了针对非转义字符的测试之外,我是否还必须针对每个需要转义的字符开发单独的测试?

这是其他人在做的吗?

如果有更好的方法,我愿意接受想法吗?

感谢您的考虑。

最佳答案

想想您要生成的表达式。您的示例正则表达式

string ss = Regex.Escape("[") + Regex.Escape("^");

相当于:

string ss = @"\[\^";

也就是说,它不是在寻找[ ^,它是在寻找[ followed通过 ^。所以 ste[^ve 会匹配。

如果要匹配包含一个或多个字符的任何字符串,则需要添加(非转义)括号以创建一组字符,例如:

string ss = "[" + Regex.Escape("[") + Regex.Escape("^") + "]"

也就是说,您要求 Regex 引擎在括号中的一组字符中查找一个字符。

关于c# - Microsoft asp c# RegEx 转义多个保留字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39808333/

相关文章:

jquery - 单击按钮时获取同一行元素的值,每行一个按钮

c# - 预编译的 ASP.NET 网站上的高波动 '% Time in JIT'

asp.net - HttpContext.AllErrors 何时包含多个异常?

c# - 为什么不是所有国家都出现在 CultureInfo.GetCultures() 中?

python - [FORKING]Python 正则表达式 - Re.Sub 和 Re.Findall 有趣的挑战

javascript - 如何使用正则表达式在非字符的所有内容上拆分字符串

regex - 正则表达式中 Kleene 星幂等性的形式化

c# - 如何通过 BindingNavigator 插入、更新和删除 DataGridView 的记录到数据库

c# - 什么是EmguCV中的drawMarker?

c# - 如何防止函数中的隐式转换?