可以看到哪个正则表达式匹配?

Posted

技术标签:

【中文标题】可以看到哪个正则表达式匹配?【英文标题】:Possible to see on which regex is matched? 【发布时间】:2020-10-16 20:29:25 【问题描述】:

是否可以在 C# 中查看匹配哪个正则表达式?

例如,如果我们有这个正则表达式:

aaa[0-9]2\.zip|bbb[0-9]2\.zip

我们用正则表达式找到bbb10.zip

是否可以看到匹配的模式(它是bbb[0-9]2.zip)?

【问题讨论】:

谢谢!但是,我现在看到的问题并不完全清楚。是否也可以获取正则表达式本身,即bbb[0-9]2.zip 【参考方案1】:

您可以定义模式列表并使用包含在捕获组中的替代方案构建模式。然后,一旦找到匹配项,您就可以遍历组并找到匹配的组。

using System;
using System.Linq;
using System.Text.RegularExpressions;

public class Test

    public static void Main()
    
        var p = new[] 
            @"aaa[0-9]2\.zip",
            @"bbb[0-9]2\.zip"
        ;
        var pat = new Regex($"(string.Join(")|(", p))");
        var match = pat.Match("We have bbb12.zip match");
        for (var n=1; n <= p.Count(); n++)
        
            if (match.Groups[n].Success) 
            
                Console.Write("0 group matched, the pattern is 1", n, p[n-1]);
                break;
            
        
    

查看C# demo,输出 - 2 group matched, the pattern is bbb[0-9]2\.zip

正则表达式看起来像(aaa[0-9]2\.zip)|(bbb[0-9]2\.zip),您可以清楚地看到两个捕获组。

注意捕获组 ID 以 1 开头,因为 match.Groups[0].Value 等于 match.Value,整个匹配,这就是为什么 for 循环以 n=1 开头。

【讨论】:

动态组和交替组很漂亮 ++

以上是关于可以看到哪个正则表达式匹配?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 换行符

正则表达式中的断言(assertions)

正则表达式(待补充)

jmeter 正则匹配。

Python正则表达式初识

Linux nginx 配置 location 语法 正则表达式