任何人都可以为我提供用于验证字符串的正则表达式,除了反斜杠之外不允许任何特殊字符。我试过了
var regexItem = new Regex("^[a-zA-Z0-9\\\ ]*$");
但它似乎无法运作
答案 0 :(得分:20)
反斜杠需要在正则表达式中进行转义 - 除非您使用verbatim string literals,否则 还需要在C#中进行转义。所以这些都应该有效:
var regexItem = new Regex(@"^[a-zA-Z0-9\\ ]*$");
var regexItem = new Regex("^[a-zA-Z0-9\\\\ ]*$");
这两个都确保将以下字符串内容传递给Regex
构造函数:
^[a-zA-Z0-9\\ ]*$
然后Regex
代码会看到双反斜杠并将其视为“我真的想要匹配反斜杠字符。”
基本上,您总是需要区分“要传递给正则表达式引擎的字符串内容”和“源代码中的字符串文字表示”。 (当然,这不仅适用于正则表达式。调试器无法通过Watch窗口中的转义等帮助。)
编辑:既然已经编辑了这个问题,表明你原来有三个反斜杠,那就是无效的C#。我怀疑你的目标是“带有三个反斜杠的字符串”,这可能是其中之一:
var regexItem = new Regex(@"^[a-zA-Z0-9\\\ ]*$");
var regexItem = new Regex("^[a-zA-Z0-9\\\\\\ ]*$");
...但就正则表达式而言,你不需要逃避空间。
答案 1 :(得分:10)
您需要双重转义它(一次用于C#,一次用于Regex引擎):
var regexItem = new Regex("^[a-zA-Z0-9\\\\ ]*$");
或者你可以使用C#的verbatim string feature(注意@):
var regexItem = new Regex(@"^[a-zA-Z0-9\\ ]*$");
在逐字符串中,反斜杠不会被解释为启动转义序列,因此您只需要为Regex引擎转义一次。
我假设你当前的代码没有编译。它应该说“无法识别的逃逸序列” 原因是你有三个反斜杠后跟一个空格。前两个反斜杠被解释为表示反斜杠的转义序列,但第三个反斜杠被解释为以空格作为第二个字符开始转义序列。这样的转义序列不存在,导致错误。
答案 2 :(得分:0)
您必须通过添加 4 \
来匹配单个\s
,以逃避\
正则表达式和C#字符串。