Regex auf Registry Key

  • Sonstige

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Link.

    Regex auf Registry Key

    Hoi

    ich hab mal eine Frage zwecks RegEx, mit dem komme ich nämlich absolut gar nicht klar ?(.

    Ich möchte ein Registry Pfad auseinander nehmen, ich denke dazu wird sich RegEx am besten anbieten. Nehmen wir an der Pfad sieht so aus:

    Quellcode

    1. HKEY_CURRENT_USER\Software\7-Zip\Compression\Options\zip


    Nun wäre es für mich interessant das "HKEY_CURRENT_USER" zu bekommen, aber quasi egal ob da nun "HKEY_CURRENT_USER" steht oder
    "HKEY_LOCAL_MACHINE". Und dann natürlich den letzten Teil, also "zip", quasi genauso dynamisch.

    Kann mir da jemand sagen wie man das mit RegEx hinbekommt?
    : NV Updater | Nvidia Driver Update Tool

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TTX.exe“ ()

    Also ich hab das nun mal so gebastelt mit Split:

    VB.NET-Quellcode

    1. Dim regex As Regex = New Regex("\\")
    2. Dim substrings() As String = regex.Split("HKEY_CURRENT_USER\Software\7-Zip\Compression\Options\zip")
    3. debug.WriteLine(substrings(0))
    4. debug.WriteLine(substrings(substrings.Length-1))

    : NV Updater | Nvidia Driver Update Tool
    Wofür denn RegEx? Die normalen Stringfunktionen reichen vollkommen. ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Hi,

    ^(HKEY_[A-Z_]+)\\Software\\7\-Zip\\Compression\\Options\\([^\\]+)$
    Somit erhältst du zwei Capturing Groups je String.

    Live-Demo für dich: regex101.com/r/vZ5mY8/1 (auf der rechten Seite siehst du die Matches mit je 2 Capturing Groups.

    Link :thumbup:
    Hello World
    Danke für die ganzen Tipps :) ich hab das ganze auch mal ohne RegEx versucht:

    VB.NET-Quellcode

    1. If path.ToUpper.Contains("HKEY_CURRENT_USER") Then
    2. Try
    3. path = path.Remove(0,18)
    4. rkey = Registry.CurrentUser.OpenSubKey(path)
    5. result = CStr(rkey.GetValue(value,"empty"))
    6. Catch ex As Exception
    7. result = "nokey"
    8. End Try
    9. End If
    : NV Updater | Nvidia Driver Update Tool
    Ok aber wenn du ja nicht weißt, welcher Root-Key das ist, kannst du das allgemeiner formulieren und aus dem Pfad einfach alles bis zum ersten ​\ wegschneiden, also z.B. ​^.+?\\.


    Link :thumbup:
    Hello World
    Dummerweise muss man ja immer wissen welcher Root-Key da kommt, da man den Key ja so öffnen muss. Finde ich auch sehr bescheiden, da ist My.Computer.Registry eigentlich deutlich besser zu handhaben :), aber irgendwie bekommt man immer schelte wenn man das benutzen mag :D

    Wie äußert sich wegschneiden bei RegeEx in VB? Benutzt man da Replace?
    : NV Updater | Nvidia Driver Update Tool
    Hi,

    du kannst dir ja den Root Key rausextrahieren - wie gesagt, Capturing Group #1.

    Ja das wird mit Replace gemacht. Wobei der Ersetzen-String dann eben leer ist (leerer String). Das heißt das gefundene (HKEY_*) wird ersetzt mit "" (nichts) und somit entfernt.

    Siehe: regex101.com/r/vZ5mY8/2 da sieht man das mit der Ersetzung dann auch. Wobei Capturing Group #2 quasi der Teil ist der nach HKEY_* kommt (öffnende Klammer vor "Software" und schließende Klammer vor "$").

    Link :thumbup:
    Hello World
    Warum willst Du denn RegistryHive vorher extrahieren? Wenn Du den vollständigen Pfad hast, kannst Du die werte doch direkt auslesen.
    Beispiel:

    VB.NET-Quellcode

    1. Dim keyName = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes"
    2. Dim valueName = "CurrentTheme"
    3. Dim value = Microsoft.Win32.Registry.GetValue(keyName, valueName, Nothing)
    4. If value IsNot Nothing Then
    5. Console.WriteLine(value.ToString)
    6. Else
    7. Console.WriteLine("Nicht gefunden.")
    8. End If
    Ah das ist ja super, das ist genau das was ich vorher meinte mit dem My.Computer.Registry, da kannte ich das so...hab das gar nicht ausprobiert da alle Beispiele immer erst den SubKey öffnen wollen ... Danke :)

    Leider stehen einem da ja nur get und set zur verfügung, zum löschen muss mann dann wieder über die OpenSubkey Sache gehen :(
    : NV Updater | Nvidia Driver Update Tool

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TTX.exe“ ()