Microsoft asp c# RegEx转义多个保留字符
本文关键字:保留 保留字 字符 转义 asp RegEx Microsoft | 更新日期: 2023-09-27 18:09:53
我只是想使用regex,如果字符串中存在一个不是常规可键入的字符,则返回true/false。这应该是一件容易的事情,不是吗?
我没有pattern, presse,我只是想知道是否存在不在列表中的字符
在正则正则表达式世界中,我只需:
[^0-9a-zA-Z~`!@#$%'^ &*()_-+={'[}]|'':;'"'<,>.?/] // <space> before the ampersand
…我知道这有点臃肿,但这篇文章的重点是…
我发现你不能转义多个保留字符。例如,Regex ex = Regex. escape ("[") + Regex. escape("^")不会命中:"st[eve]或"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# Regex转义字符:
string ss = Regex.Escape("^");
Regex rx = new Regex(ss);
string s = "st^eve"; rx.IsMatch(s));
除了对非转义字符的测试外,我是否必须为每个转义必需字符开发单独的测试?
这是其他人正在做的吗?
如果有更好的方法,我愿意接受各种想法。谢谢您的考虑。
考虑生成的表达式。您的示例RegEx
string ss = Regex.Escape("[") + Regex.Escape("^");
等价于:
string ss = @"'['^";
也就是说,它不是在寻找[
或 ^
,而是在寻找[
然后是 ^
。所以ste[^ve
会匹配。
如果要匹配任何包含一个或多个字符的字符串,则需要添加(非转义的)括号来创建一组字符,例如:
string ss = "[" + Regex.Escape("[") + Regex.Escape("^") + "]"
也就是说,您要求Regex引擎在括号中的字符集中查找一个字符。
首先感谢@PMV。他的输入提示我做了一堆测试。
这显然是它真正的工作原理。
无论我尝试什么,我都不能得到双引号或单引号匹配,除非这两个单独的测试。这实际上是有意义的,一直回到C语言。
注意:在没有的情况下,你有使用.Escape()
。在我看来,必须使用一个函数来为你创建一个string = "'["是愚蠢的。.Escape() is not necessary on ^ nor { nor ] nor ' nor " nor '
.
string ss = "[0-9A-Z~`!@#$%^& *()-_+={[}]|'':;<,>.?/";
// does not match ~ ss = ss + Regex.Escape("'"");
// does not match ~ ss = ss + Regex.Escape("''");
ss = ss + "]";
Regex rx = new Regex(ss);
// rx = new Regex("[" + Regex.Escape("'"") + "]");
// works just as well as the line above ~ rx = new Regex("['"]");
// rx = new Regex("[" + Regex.Escape("'") + "]");
rx = new Regex("[']");
string s = "ste've";
Console.WriteLine("search string {0}", ss);
Console.WriteLine("IsMatch {0}", rx.IsMatch(s));
就差这么一点了