C# 正则表达式需要很长时间才能找到匹配项
此正则表达式:C# 正则表达式需要很长时间才能找到匹配项,c#,regex,C#,Regex,此正则表达式: @"^(?:\s*)((?:[a-zA-Z]+[\s-]?)+[a-zA-Z]+)(?:\s*)$ 这需要很长时间,在一些复杂的情况下,这是可怕的 你能告诉我如何在Web应用程序的C#开发中优化这个正则表达式吗?问题是(?:[a-zA-Z]+[\s-]?)+会在你的正则表达式中引起大量的回溯,因为它被放在其他模式之间,[\s-]匹配1或0空格或-(也就是说,它是可选的)并且整个子模式被缩减为([a-zA-Z]+)+,这会导致错误 使用 相反,看 详细信息: ^-字符串的开头
@"^(?:\s*)((?:[a-zA-Z]+[\s-]?)+[a-zA-Z]+)(?:\s*)$
这需要很长时间,在一些复杂的情况下,这是可怕的
你能告诉我如何在Web应用程序的C#开发中优化这个正则表达式吗?问题是
(?:[a-zA-Z]+[\s-]?)+
会在你的正则表达式中引起大量的回溯,因为它被放在其他模式之间,[\s-]
匹配1或0空格或-
(也就是说,它是可选的)并且整个子模式被缩减为([a-zA-Z]+)+
,这会导致错误
使用
相反,看
详细信息:
-字符串的开头^
-一旦模式匹配,即如果引擎从字符串开头找到除换行符以外的任何36个字符,则会导致匹配失败的负前瞻)(?!.{36})
-零个或多个空格\s*
-第1组:([a-zA-Z]+(?:[\s-][a-zA-Z]+)*)
-1个或多个ASCII字母[a-zA-Z]+
-零个或多个序列:(?:[\s-][a-zA-Z]+)*
-空白或[\s-]
-
-1个或多个ASCII字母[a-zA-Z]+
-0+尾随空格\s*
-字符串结尾(尽管后面可能有一个$
,如果不需要,请替换为\n
)\z
^(?!.{36})\s*([a-zA-Z]+(?:[\s-][a-zA-Z]+)*)\s*$