Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么这个正则表达式在.NET中失败?_C#_.net_Regex - Fatal编程技术网

C# 为什么这个正则表达式在.NET中失败?

C# 为什么这个正则表达式在.NET中失败?,c#,.net,regex,C#,.net,Regex,看看这个测试方法: [ Test ] public static void TestRegex() { var goodTextsToTest = new List<string> { "http://google.com", "https://google.com/", "ftp://bugger!!!one1", "ftss://shoot",

看看这个测试方法:

[ Test ]
public static void TestRegex() {
    var goodTextsToTest = new List<string>
        {
            "http://google.com",
            "https://google.com/",
            "ftp://bugger!!!one1",
            "ftss://shoot",
            "somelongergibberish://flkjd",
            "thescheme://green"
        };
    var badTextsToTest = new List<string> { "bad432:4h//orange", "1ftp://1bugger!!!one1", "IAmTheVeryModelOfAModernMajorGeneral", "" };

    var regex = new Regex( "^([a-z][a-z0-9+\\.\\-]*)*://", RegexOptions.IgnoreCase );

    foreach( var txt in badTextsToTest )
        Assert.IsFalse( regex.IsMatch( txt ), "Passed but should have failed: " + txt );

    foreach( var txt in goodTextsToTest )
        Assert.IsTrue( regex.IsMatch( txt ), "Failed but should have passed: " + txt );
}
正如目前编写的,此代码从不从var regex=new regex^[a-z][a-z0-9+\\.\\-]**://,RegexOptions.IgnoreCase;返回;。代码被卡住的输入是一个非常著名的基本输入

为什么这个正则表达式在输入为IAMTheveryModerNMajorGeneral时会导致无限循环

奖金问题:
如果从正则表达式中删除:/,则此代码将完成执行。即var regex=new regex^[a-z][a-z0-9+\\.\\-]**,RegexOptions.IgnoreCase;为什么要这样做呢?

您的正则表达式(按现在的设计)将需要87500多个步骤才能完成,因为它是回溯的。见脱布格。这就是我们所说的

您的正则表达式,按照现在的设计,由于回溯,它需要87500多个步骤才能完成。见脱布格。这就是我们所说的

让我们不要把重点放在正则表达式的意图上,也不要放在正则表达式如何更好上。这个特定的表达式是如何在这个特定的输入中失败的。@托马斯:斜杠不是特殊字符。灾难性的回溯?它对字符串IVeInformationVegetableanimalAdministrator的性能如何?我们不要把重点放在正则表达式的意图上,或者它如何更好。这个特定的表达式如何在这个特定的输入中失败。@托马斯:斜杠不是特殊字符。灾难性的回溯?它在字符串IVeInformationVegetableanimalAdministral上如何执行?@PanagiotisKanavos一些语言将永远运行,另一些语言将抛出堆栈溢出…或运行时。4.5.2增加了尾部递归优化,如果递归调用是最后一次调用,则重用堆栈,因此不会导致堆栈溢出。我怀疑任何为函数式编程优化的语言/运行时都会表现出same@PanagiotisKanavos一些语言将永远运行,另一些语言将抛出堆栈溢出…或运行时。4.5.2增加了尾部递归优化,如果递归调用是最后一次调用,则重用堆栈,因此不会导致堆栈溢出。我怀疑任何为函数式编程优化的语言/运行时都会表现出相同的行为