none
C#.NET 4.0 正则表达式疑似BUG RRS feed

  • 问题

  • 首先是Windows Forms 窗体程序,一个TextBox和一个Button,窗体载入时给文本框加上30个换行符:

    for (int i = 0; i < 30; i++)
    {
        textBox1.Text += "\r\n";
    }

    然后按钮点击执行如下代码:

    Regex regex = new Regex(@"(.|\r|\n)*<>");
    MatchCollection matches = regex.Matches(textBox1.Text);
    MessageBox.Show("匹配数:" + matches.Count.ToString());
    此时执行程序点击按钮会导致CPU占用率非常高,而后程序会出现无响应,同样的正则表达式匹配规则和同样的待匹配文本我在Javascript中测试正常,问题相关环境:Windows 8.1 ,Visual Studio 2015,.NET Framework 4.0。
    2019年6月11日 9:36

答案

  • Hi   梦恒,

    你需要调整下 正则表达式。

            private void button1_Click(object sender, EventArgs e)
            {
                string pattern = @"(\r\n|\s+)";
                Regex regex = new Regex(pattern);
                MatchCollection matches = regex.Matches(textBox1.Text);
                MessageBox.Show("匹配数:" + matches.Count.ToString());
            }


    Best regards

    Yong Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 梦恒 2019年6月12日 8:10
    2019年6月12日 6:23
    版主

全部回复

  • Hi   梦恒,

    你需要调整下 正则表达式。

            private void button1_Click(object sender, EventArgs e)
            {
                string pattern = @"(\r\n|\s+)";
                Regex regex = new Regex(pattern);
                MatchCollection matches = regex.Matches(textBox1.Text);
                MessageBox.Show("匹配数:" + matches.Count.ToString());
            }


    Best regards

    Yong Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 梦恒 2019年6月12日 8:10
    2019年6月12日 6:23
    版主
  • 好的,你提供的正则表达式确实能够正常执行,那为什么我的这个 @"(.|\r|\n)*<>" 会出现不正常现象,但是去掉<>后也是执行正常的,<>这两个字符应该不属于正则表达式中的元字符或者是保留关键字吧。

    Regex regex = new Regex(@"(.|\r|\n)*");
    Regex regex2 = new Regex(@"(.|\r|\n)*<>");

    这两个正则表达式其中一个执行正常,另外一个不正常,<>在.NET正则表达式中有什么特殊含义吗。

    • 已标记为答案 梦恒 2019年6月12日 8:10
    • 取消答案标记 梦恒 2019年6月12日 8:10
    2019年6月12日 8:07