LINQ-query's combineren met reguliere expressies (Visual Basic)
In dit voorbeeld ziet u hoe u de Regex klasse gebruikt om een reguliere expressie te maken voor complexere overeenkomsten in tekenreeksen. Met de LINQ-query kunt u eenvoudig filteren op precies de bestanden die u wilt doorzoeken met de reguliere expressie en om de resultaten vorm te geven.
Opmerking
Imports System.IO
Imports System.Text.RegularExpressions
Class LinqRegExVB
Shared Sub Main()
' Root folder to query, along with all subfolders.
' Modify this path as necessary so that it accesses your Visual Studio folder.
Dim startFolder As String = "C:\Program Files (x86)\Microsoft Visual Studio 14.0\"
' One of the following paths may be more appropriate on your computer.
'Dim startFolder As String = "C:\Program Files (x86)\Microsoft Visual Studio\2017\"
' Take a snapshot of the file system.
Dim fileList As IEnumerable(Of FileInfo) = GetFiles(startFolder)
' Create a regular expression to find all things "Visual".
Dim searchTerm As New Regex("Visual (Basic|C#|C\+\+|Studio)")
' Search the contents of each .htm file.
' Remove the where clause to find even more matches!
' This query produces a list of files where a match
' was found, and a list of the matches in that file.
' Note: Explicit typing of "Match" in select clause.
' This is required because MatchCollection is not a
' generic IEnumerable collection.
Dim queryMatchingFiles = From afile In fileList
Where afile.Extension = ".htm"
Let fileText = File.ReadAllText(afile.FullName)
Let matches = searchTerm.Matches(fileText)
Where (matches.Count > 0)
Select Name = afile.FullName,
Matches = From match As Match In matches
Select match.Value
' Execute the query.
Console.WriteLine("The term " & searchTerm.ToString() & " was found in:")
For Each fileMatches In queryMatchingFiles
' Trim the path a bit, then write
' the file name in which a match was found.
Dim s = fileMatches.Name.Substring(startFolder.Length - 1)
Console.WriteLine(s)
' For this file, write out all the matching strings
For Each match In fileMatches.Matches
Console.WriteLine(" " + match)
Next
Next
' Keep the console window open in debug mode
Console.WriteLine("Press any key to exit")
Console.ReadKey()
End Sub
' Function to retrieve a list of files. Note that this is a copy
' of the file information.
Shared Function GetFiles(root As String) As IEnumerable(Of FileInfo)
Return From file In My.Computer.FileSystem.GetFiles(
root, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
Select New FileInfo(file)
End Function
End Class
U kunt ook een query uitvoeren op het MatchCollection object dat wordt geretourneerd door een Regex
zoekopdracht. In dit voorbeeld wordt alleen de waarde van elke overeenkomst geproduceerd in de resultaten. Het is echter ook mogelijk om LINQ te gebruiken om allerlei soorten filters, sortering en groepering op die verzameling uit te voeren. Omdat MatchCollection dit een niet-algemene IEnumerable verzameling is, moet u expliciet het type bereikvariabele in de query aangeven.
De code compileren
Maak een Visual Basic-consoletoepassingsproject, kopieer en plak het codevoorbeeld en pas de waarde van het opstartobject aan in de projecteigenschappen.