gelöst: Dateiname und -Pfad per Regex prüfen

Anfängerfragen zum Programmieren mit PureBasic.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

gelöst: Dateiname und -Pfad per Regex prüfen

Beitrag von bin_neu_hier »

Hallo,

leider tu ich mir sehr schwer mit dem RegEx-Gedöhns und könnte da handfeste Unterstützung gebrauchen. Ich würde gern die Dateinamen (mit und ohne Laufwerk und Pfad), die der User meines Progrämmchens eingibt, auf Windows-Kompatibilität prüfen und würde das gerne mit einem RegEx-Vergleich prüfen. Hat jemand einen solchen RegEx-String, mit dem das zuverlässig zu machen ist?
Zuletzt geändert von bin_neu_hier am 13.08.2022 12:24, insgesamt 2-mal geändert.
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Regex und Knoten im Hirn

Beitrag von mk-soft »

Siehe PB Hilfe

Code: Alles auswählen

Ergebnis = CheckFilename(Dateiname$)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Regex und Knoten im Hirn

Beitrag von NicTheQuick »

CheckFilename prüft aber nur den Dateinamen ansich, nicht den ganzen Pfad.

@bin_neu_hier: Wenn du es selbst hinkriegen möchtest, empfehle ich dir https://regex101.com/. Da kannst du dann alle möglichen Pfade, die du erkennen und nicht erkennen willst, im unteren Feld eingeben und im oberen kannst du deine Regular Expression definieren und schauen, ob sie genau das richtige macht. Außerdem gibt es dort super Erklärungen zu allen möglichen Dingen, die RegEx so kann.
Bild
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Regex und Knoten im Hirn

Beitrag von jacdelad »

Probier mal

Code: Alles auswählen

^[a-zA-Z]:(\\\w+)*([\\]|[.][a-zA-Z]+)?$
..aber ohne Gewähr.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Regex und Knoten im Hirn

Beitrag von NicTheQuick »

jacdelad hat geschrieben: 08.08.2022 22:34 Probier mal

Code: Alles auswählen

^[a-zA-Z]:(\\\w+)*([\\]|[.][a-zA-Z]+)?$
..aber ohne Gewähr.
Damit funktionieren auf jeden Fall schon mal keine Netzwerkpfade, da die in der Regel keinen Laufwerksbuchstaben haben.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Regex und Knoten im Hirn

Beitrag von NicTheQuick »

Auf Anhieb hab ich noch was auf Stackoverflow gefunden: https://stackoverflow.com/a/64822303/4239139
Dabei ist auch ein Link zu Regex101 zum herumexperimentieren: https://regex101.com/r/9J5JPW/1
Bild
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Regex und Knoten im Hirn

Beitrag von jacdelad »

NicTheQuick hat geschrieben: 08.08.2022 22:39
jacdelad hat geschrieben: 08.08.2022 22:34 Probier mal

Code: Alles auswählen

^[a-zA-Z]:(\\\w+)*([\\]|[.][a-zA-Z]+)?$
..aber ohne Gewähr.
Damit funktionieren auf jeden Fall schon mal keine Netzwerkpfade, da die in der Regel keinen Laufwerksbuchstaben haben.
Schtümmt. Besser:

Code: Alles auswählen

^([a-zA-Z]:)|(\\)(\\\w+)*([\\]|[.][a-zA-Z]+)?$
...allerdings werden hier an quasi jeder Stelle wilde "\" akzeptiert, also auch "\\\Netzwerk\Bla\Trödel.exe". Ich weiß noch nicht, wie man das austreiben kann.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Re: Regex und Knoten im Hirn

Beitrag von bin_neu_hier »

Hi allerseits!
Erstmal Danke für Euren Input! Ob die "wilden \\" ein Problem darstellen, weiß ich noch gar nicht. Könnte denn das Explorerlistgadget überhaupt Netzwerkpfade öffnen bzw. anzeigen? Wenn das Gadget die Sache schon limitieren würde, dann bräuchte ich nur was, das innerhalb des Gadgets funzt.

Plan "B": Wo fände ich denn Angaben, was ein "Bulletproof"-Dateipfad bzw. Dateiname in Windows enthalten darf und was nicht. Vielleicht muss es dann doch eine Procedure werden mit zig IF's und so.
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Regex und Knoten im Hirn

Beitrag von jacdelad »

Hm, also wenn ich mich nicht komplett irre sollte mit folgendem Code alles abgedeckt sein, auch wilde "\":

Code: Alles auswählen

CreateRegularExpression(0,"^([a-zA-Z]:)|(\\)(\\\w+)*([\\]|[.][a-zA-Z]+)?$")

Procedure Check(input.s)
  ProcedureReturn Bool(MatchRegularExpression(0,input) And Not (FindString(Right(input,Len(input)-1),"\\") Or Right(input,1)="\"))
EndProcedure

Debug Check("C:\Windows\System32\MyFile.sys") ;1
Debug Check("C:\Windows\System32\MyFile")     ;1
Debug Check("C:\Windows\System32\MyFile.sys\");0
Debug Check("C:\Windows\System32\\MyFile.sys");0
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Regex und Knoten im Hirn

Beitrag von Nino »

Kann dieser Thread bitte umbenannt werden in „Dateipfad prüfen“ o.Ä.?
Der momentane Titel „Regex und Knoten im Hirn“ ist für spätere Leser und beim Suchen nicht besonders hilfreich.
Antworten