12

谁能为我提供正则表达式来验证字符串,它只允许除反斜杠之外的任何特殊字符。我试过了

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

但这似乎不起作用

4

3 回答 3

28

反斜杠需要在正则表达式中进行转义 - 并且它们需要在 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\\\\\\ ]*$");

...但就正则表达式而言,您不需要转义空格。

于 2013-02-01T07:07:47.060 回答
11

您要么需要对其进行双重转义(一次用于 C#,一次用于正则表达式引擎):

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

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

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

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

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

于 2013-02-01T07:06:34.237 回答
0

您必须\通过添加4 \s来匹配单个\.

于 2013-02-01T07:06:43.047 回答