[英]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.