我有一个正则表达式,我现在需要进入C#。我收到这样的错误
Unrecognized escape sequence
我正在使用Regex.Escape - 但显然不正确。
string pattern = Regex.Escape("^.*(?=.{7,})(?=.*[a-zA-Z])(?=.*(\d|[!@#$%\?\(\)\*\&\^\-\+\=_])).*$");
hiddenRegex.Attributes.Add("value", pattern);
这是如何正确完成的?
答案 0 :(得分:4)
你得到的错误是在编译时正确的吗?这意味着C#编译器无法理解您的字符串。在字符串前面加上@符号,你应该没问题。你不需要Regex.Escape。
请参阅What's the @ in front of a string in C#?
var pattern = new Regex(@"^.*(?=.{7,})(?=.*[a-zA-Z])(?=.*(\d|[!@#$%\?\(\)\*\&\^\-\+\=_])).*$");
pattern.IsMatch("Your input string to test the pattern against");
答案 1 :(得分:0)
您获得的错误是由于您的字符串包含无效的转义序列(例如\d
)。要解决此问题,请手动转义反斜杠或改为编写verbatim string literal:
string pattern = @"^.*(?=.{7,})(?=.*[a-zA-Z])(?=.*(\d|[!@#$%\?\(\)\*\&\^\-\+\=_])).*$";
当您想要将动态内容嵌入正则表达式时,将使用 Regex.Escape
,而不是在您想构建固定正则表达式时。例如,您可以在此处使用它:
string name = "this comes from user input";
string pattern = string.Format("^{0}$", Regex.Escape(name));
这样做是因为name
很可能包含正则表达式中具有特殊含义的字符,例如点或圆括号。当name
被硬编码时(如您的示例所示),您可以手动转义这些字符。