gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:54 25 4
gpt4 key购买 nike

我只想使用正则表达式,如果字符串中存在一个不是常规可键入字符的字符,它将返回 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com