匹配正则表达式时正则表达式嵌套量词异常。

时间:2016-01-25 06:56:01

标签: c# regex

int characterLimit = 5;
Regex regxForAlpha = new Regex("^[a-zA-Z \n] {0,"+characterLimit.ToString()+"}+$");
if(!string.IsNullOrEmpty(e.NewTextValue))
if (!Regex.IsMatch( e.NewTextValue, regxForAlpha)){
}
else
{
}

此代码抛出NestedQuantifier异常。谁能知道为什么?

2 个答案:

答案 0 :(得分:1)

这是一个固定的代码:

string NewTextValue = "str";
int characterLimit = 5;
string regxForAlpha = "^[a-zA-Z \n]{0,"+characterLimit.ToString()+"}$";
if(!string.IsNullOrEmpty(NewTextValue))
    if (!Regex.IsMatch( NewTextValue, regxForAlpha)){
        Console.WriteLine("No match");
    }
    else
    {
        Console.WriteLine("Match");
    }

有关演示目的,请参阅IDEONE demo(将e.NewTextValue更改为NewTextValue

有几个兴趣点:

  • Regex.IsMatch接受字符串,而不是Regex对象,作为其第二个参数
  • .NET正则表达式不支持您正在使用的所有格量词(在正则表达式的末尾,有{0,5}+ - 并且+导致嵌套量词问题)。
  • 此外,图案与限制图案长度的限制量词之间必须没有空格。因此,当您将模式定义为[a-zA-Z \n] {0,5}时,{0,5} 应用于左侧紧邻的空间,并且正则表达式的含义有些失真

答案 1 :(得分:0)

请改变

Regex regxForAlpha = new Regex("^[a-zA-Z \n] {0,"+characterLimit.ToString()+"}+$");

Regex regxForAlpha = new Regex("^[a-zA-Z \n] {0,"+characterLimit.ToString()+"}$");