C#无法理解正则表达式

时间:2014-01-17 05:14:41

标签: c# regex

我正在尝试验证文本框只接受字母数字和"\"字符,如下所示:Testing123\将返回true。 以下是我到目前为止所尝试的内容:

"^[a-zA-Z0-9]*?$"

上述表达式可以接受字母数字,但不限制工作正常的字母数。

如果没有弄错的话,"\"表现为转义字符,所以我尝试了下面的表达式,但它正在抛出unterminated expression异常:

"^[a-zA-Z0-9\\]*?$"

2 个答案:

答案 0 :(得分:8)

您将不得不双重转义反斜杠字符,因为您实际上需要将两个反斜杠发送到Regex解析器:

string example1 = "^[a-zA-Z0-9\\\\]*?$"; //two backslash characters assigned to the string

第一级转义是针对编译器的,第二级是正则表达式 - 反斜杠是一个转义字符,在C#和Regex中都是如此(就像\n这样的东西对C#编译器有意义像\s这样的东西对Regex解析器有意义)

或者您可以使用@文字标记:

string example2 = @"^[a-zA-Z0-9\\]*?$" //same here but the @ symbol saves us the headache

为什么你看到“未终止的表达式”是正则表达式解析器看到的^[a-zA-Z0-9\]*?$ - 也就是一个行首标记,后跟一个包含大写,小写,数字和字符{{的字符类1}},]*?从未关闭,因为没有结束括号

答案 1 :(得分:0)

在正则表达式中添加一个反斜杠,如下所示:

"^[a-zA-Z0-9\\\\]*?$"