.net - 正则表达式(.NET 方言): strange behaviour of a capturing group

标签 .net regex

我被困住了。为什么此代码中的组 path 的值为 2/3/4,而不是 1/2/3/41/ 去哪儿了?表达式的哪一部分匹配 1/

var re = new Regex(@"^-/?(?'folder'((?'path'.+?)/)??[^/]*)/?$");
var m = re.Match("-1/2/3/4/5");
m.Groups["folder"].Value.Dump("Folder");
m.Groups["path"].Value.Dump("Path");

最佳答案

看起来这是 .NET 3.5 和 4.0 之间的行为差​​异。这是一个完整的程序:

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main()
    {
        var re = new Regex(@"^-/?(?'folder'((?'path'.+?)/)??[^/]*)/?$");
        var m = re.Match("-1/2/3/4/5");
        Console.WriteLine("Folder: " + m.Groups["folder"].Value);
        Console.WriteLine("Path: " + m.Groups["path"].Value);
    }
}

在.NET 3.5下编译并运行:

Folder: 1/2/3/4/5
Path: 2/3/4

在.NET 4下编译并运行:

Folder: 1/2/3/4/5
Path: 1/2/3/4

我不知道为什么行为会有所不同......

编辑:我对此进行了进一步调查...在 .NET 3.5 下,该组由两个捕获组成:“1”和“2/3/4”。在 .NET 4 下,它是单个捕获“1/2/3/4”。

关于.net - 正则表达式(.NET 方言): strange behaviour of a capturing group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4783354/

相关文章:

java - 为什么这个正则表达式不匹配?

正则表达式匹配 <A>、<BB>、<CCC> 但不匹配 <ABC> 等标签

c# - BeginInvoke 未在 WPF 应用程序的线程内触发

c# - .NET 中类(对象)的大小

.net - count(*) 的 SQL 语句有问题

regex - 带有 -regex 选项的 Linux `find` 命令无法按预期工作

Java解析字符串表达式

regex - xregexp 有不同的结果

.NET 内存管理

c# - ToLookup() 如何使用多个索引?