正则表达式允许在C#中使用反斜杠

Suh*_*aib 8 c# regex

任何人都可以为我提供用于验证字符串的正则表达式,除了反斜杠之外不允许任何特殊字符.我试过了

var regexItem = new Regex("^[a-zA-Z0-9\\\ ]*$");
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用

Jon*_*eet 22

反斜杠需要在正则表达式中进行转义 - 除非你使用逐字字符串文字,否则它们需要在C#中进行转义.所以这些都应该有效:

var regexItem = new Regex(@"^[a-zA-Z0-9\\ ]*$");
var regexItem = new Regex("^[a-zA-Z0-9\\\\ ]*$");
Run Code Online (Sandbox Code Playgroud)

这两个都确保将以下字符串内容传递给Regex构造函数:

^[a-zA-Z0-9\\ ]*$
Run Code Online (Sandbox Code Playgroud)

然后Regex代码将看到双反斜杠并将其视为"我真的想要匹配反斜杠字符".

基本上,您总是需要区分"要传递给正则表达式引擎的字符串内容"和"源代码中的字符串文字表示".(当然,这不仅适用于正则表达式.调试器无法通过Watch窗口中的转义等帮助)

编辑:现在问题已被编辑,表明你原来有三个反斜杠,这只是无效的C#.我怀疑你的目标是"带有三个反斜杠的字符串",这可能是以下任何一个:

var regexItem = new Regex(@"^[a-zA-Z0-9\\\ ]*$");
var regexItem = new Regex("^[a-zA-Z0-9\\\\\\ ]*$");
Run Code Online (Sandbox Code Playgroud)

...但就正则表达式而言,您不需要逃避空间.


Dan*_*rth 10

您需要双重转义它(一次用于C#,一次用于Regex引擎):

var regexItem = new Regex("^[a-zA-Z0-9\\\\ ]*$");
Run Code Online (Sandbox Code Playgroud)

或者你可以使用C#的逐字字符串功能(注意@):

var regexItem = new Regex(@"^[a-zA-Z0-9\\ ]*$");
Run Code Online (Sandbox Code Playgroud)

在逐字字符串中,反斜杠不会被解释为启动转义序列,因此您只需要为Regex引擎转义一次.

我假设您当前的代码无法编译.它应该说"无法识别的逃逸序列".
原因是你有三个反斜杠后跟一个空格.前两个反斜杠被解释为表示反斜杠的转义序列,但第三个反斜杠被解释为以空格作为第二个字符开始转义序列.这样的转义序列不存在,导致错误.