簡體   English   中英

C#正則表達式查找缺少字符串的組?

[英]C# Regex locate groups missing a string?

首先,我對Regex感到恐懼。 道歉,如果這很容易,我只是想念它:(

好的,假設我正在解析我的源代碼,並找到我所有的私有函數。 此外,假設我想獲取整個代碼塊,以便我可以對其進行檢查。

正則表達式匹配項:

Private Function[\s\S]*?End Function

效果很好。

現在,如果我想查找所有缺少Return語句的函數,該怎么辦? 我似乎無法弄清楚這一點(請參見上文re:regex,我也沒有很好地相處)。

有人介意向我指出正確的方向嗎? 如果重要的話,我正在使用regex的.NET實現(而且似乎-我發現的Java實例似乎都不起作用!)

如果有問題,我正在使用regexstorm.net進行測試:)謝謝!

看來您可能正在分析Visual Basic。 您可以使用Microsoft的代碼分析工具( Roslyn )來解析代碼並分析不同的部分。 這將避免尋找不同代碼文件的語法接受程度不同。 以下示例代碼將確定Function是私有的還是具有as子句的。

string code = @"
    Function MyFunction()
    End Function

    Private Function MyPrivateFunction()
    End Function

    Function WithAsClause() As Integer
    End Function
    ";

// Parse the code file.
var tree = VisualBasicSyntaxTree.ParseText(code);

var root = tree.GetCompilationUnitRoot();

// Find all functions in the code file.
var nodes = root.DescendantNodes()
    .Where(n => n.Kind() == SyntaxKind.FunctionBlock)
    .Cast<MethodBlockSyntax>();

foreach (var node in nodes)
{
    // Analyze the data for the function.
    var functionName = node.SubOrFunctionStatement.Identifier.GetIdentifierText();
    bool isPrivate = node.BlockStatement.Modifiers.Any(m => m.Kind() == SyntaxKind.PrivateKeyword);
    var asClause = node.SubOrFunctionStatement.AsClause;
    bool hasAsClause = asClause != null;

    Console.WriteLine($"{functionName}\t{isPrivate}\t{hasAsClause}");
}

暫無
暫無

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

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