簡體   English   中英

正則表達式 IsMatch 停止匹配

[英]Regex IsMatch stops matching

我正在用 Regex 編寫一個檢查器,我正在使用一種流行的工具測試結果: https://regex101.com/r/DeMWEy/1

我有一個應該匹配的字符串列表:

Process(Bystronic.Ads.GraphQL)\% Processor Time
Process(Bystronic.ParameterTuning.WebApi.Service)\\% Processor Time
Process(Bystronic.Ads.GraphQL)\\IO Write Bytes/sec
Process(DcCutting)\\IO Read Bytes/sec
Process(DcCutting)\\% Processor Time

還有一個應該匹配所有這些的正則表達式。

"Process(.+)\\.+"

這是一個 MVC:

using System.Text.RegularExpressions;

public class MainClass
{

    private static bool IsProcessMatch(string column)
    {
        return Regex.IsMatch(column, "Process(.+)\\.+");
    }

    public static void Main()
    {
        var result1 = IsProcessMatch("Process(Bystronic.Ads.GraphQL)\\% Processor Time");
        var result2 = IsProcessMatch("Process(Bystronic.ParameterTuning.WebApi.Service)\\% Processor Time");
        var result3 = IsProcessMatch("Process(Bystronic.Ads.GraphQL)\\IO Write Bytes/sec");
        var result4 = IsProcessMatch("Process(DcCutting)\\IO Read Bytes/sec");
        var result5 = IsProcessMatch("Process(DcCutting)\\% Processor Time");

        Console.WriteLine(result1);
        Console.WriteLine(result2);
        Console.WriteLine(result3);
        Console.WriteLine(result4);
        Console.WriteLine(result5);
    }
}

我在第一個和第二個中匹配,但在 rest 中沒有匹配。有人可以向我解釋它們之間的區別嗎?

C# 對待模式與您發布的使用正則表達式引擎的頁面略有不同。 在左側有一個菜單,您可以在其中選擇口味。 如果您選擇 C#,您將看到:

在此處輸入圖像描述

缺少一個小細節: @在您的代碼中。 該頁面將為您添加它

private bool IsProcessColumn(string column)
{
    return Regex.IsMatch(column, @"Process(.+)\\.+");
}

這是一個用於測試的小提琴

解釋:問題是字符\是一個特殊字符,在正則表達式的上下文中也是不明確的。

  1. 它在普通字符串中用作轉義字符。
  2. 在 Regex 中,它用於特殊字符,如\d (數字),並標記真實字符,如: \. (匹配一個真實的點)

因此,如果沒有@ ,該模式將被解釋為尋找一個點,因為第一個反斜杠是一個轉義字符,它使第二個反斜杠成為應用於該點的正則表達式的修飾符: \. . 您可以通過在最后一個字符串中插入一個點來測試它:

string a5 = "Process(DcCutting)\\%. Processor Time";

並且您將與您的原始模式相匹配。

使用@ (這意味着您不需要轉義特殊字符)導致第一個反斜杠已被視為正則表達式的修飾符,然后將其應用於第二個反斜杠: \\試圖匹配中的真實反斜杠字符串,和. 然后被解釋為通配符。

聽起來非常復雜。 我希望我至少有一點可以理解

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM