Reguläre Ausdrücke in der Suche
Moderators: Hacker, Stefan2, white
Reguläre Ausdrücke in der Suche
Hallo,
ich frage mich warum ich in der Dateisuche (Alt+F7), wenn ich reguläre Ausdrücke aktiviere mit dem Suchbegriff:
[^a]
eine Datei namens:
a.a
aber keine namens:
a
finde. a kommt doch in beiden Dateinamen vor. Sollte der Suchbegriff nicht fragen:
Finde mir eine Datei in der a nicht vorkommt? Worauf sucht denn der reguläre Ausdruck?
In der Hilfe ist das leider nicht zu finden.
Gruss franc
ich frage mich warum ich in der Dateisuche (Alt+F7), wenn ich reguläre Ausdrücke aktiviere mit dem Suchbegriff:
[^a]
eine Datei namens:
a.a
aber keine namens:
a
finde. a kommt doch in beiden Dateinamen vor. Sollte der Suchbegriff nicht fragen:
Finde mir eine Datei in der a nicht vorkommt? Worauf sucht denn der reguläre Ausdruck?
In der Hilfe ist das leider nicht zu finden.
Gruss franc
Auszug aus der TC Hilfe:
Gruß MrGolgi
Gruß
Dein Ausdruck findet also genau, wie Du es beschreibst, alle Dateien, deren Name nicht genau aus einem "a" besteht. Das ist allerdings vermutlich leider nicht das was Du wolltest. Ich glaube eine verallgemeinerte Negation ist mit regulären Ausdrücken nicht so einfach, aber ich bin nicht der Experte dafür. Antworten würden mich aber auch sehr interessieren.Zeichenklassen:
Zeichen in eckigen Klammern bilden eine Zeichenklasse. Es wird genau ein Zeichen aus dieser Klasse gefunden. Mit einem Bindestrich werden Gruppen definiert, etwa [a-z]. Ein ^ am Anfang findet alle Zeichen ausser den genannten.
Beispiele:
[aeiou] Findet genau einen dieser Vokale.
[^aeiou] Findet alles ausser einem Vokal
M[ae][iy]er Findet Herrn Meier in allen möglichen Schreibweisen: Mayer, Meyer, Maier, Meier. Sehr nützlich, wenn man sich nicht mehr an die genaue Schreibweise erinnern kann!
Gruß MrGolgi
Gruß
Ein Pessimist ist ein Optimist mit Erfahrung
- StickyNomad
- Power Member
- Posts: 1933
- Joined: 2004-01-10, 00:15 UTC
- Location: Germany
2franc
RegEx spreche ich leider nicht, aber je nachdem was Du genau bezweckst gehts vielleicht auch ohne:
findet alle Dateien in denen 'a' nicht vorkommt, schliesst also alle Dateien aus, die einmal oder mehrmals 'a' enthalten (das '|' steht hier für die Negation ohne regEx).
RegEx spreche ich leider nicht, aber je nachdem was Du genau bezweckst gehts vielleicht auch ohne:
Code: Select all
|*a*
Wenn man alle Dateien haben will, die kein a enthalten könnte man so vorgehen:
- Auf beiden Seiten im TC das selbe Verzeichnis öffnen
- Auf einer Seite alle Dateien MIT a suchen [a]
- Im Resultatfenster auf "Anwenden" klicken
- Dann hat man eine Liste aller Dateien MIT a
- Dann "Verzeichnisse Vergleichen"
- Damit hat man dann im anderen Fenster alle Dateien OHNE a markiert.
Gruß MrGolgi
- Auf beiden Seiten im TC das selbe Verzeichnis öffnen
- Auf einer Seite alle Dateien MIT a suchen [a]
- Im Resultatfenster auf "Anwenden" klicken
- Dann hat man eine Liste aller Dateien MIT a
- Dann "Verzeichnisse Vergleichen"
- Damit hat man dann im anderen Fenster alle Dateien OHNE a markiert.
Gruß MrGolgi
Ein Pessimist ist ein Optimist mit Erfahrung
Nein, Dein Suchausdruck bedeutet "Finde ein beliebiges Zeichen außer a" und dieses beliebige Zeichen ist in der Zeichenkette "a.a" der Punkt.Sollte der Suchbegriff nicht fragen:
Finde mir eine Datei in der a nicht vorkommt?
Das, was Du haben möchtest, ist, zumindest mit RegEx, im TC nicht möglich, weil die verwendete RegEx-Bibliothek hoffnungslos veraltet ist, sie gehört schon lange in die Restmülltonne. Der Request zum Umstieg auf eine brauchbare Bibliothek hat leider immer noch nicht zu einem Ergebnis geführt, aber man soll die Hoffnung ja nie aufgeben...
Was Du für Dein Anliegen brauchst, ist eine "negative look-ahead assertion":
"Finde eine Zeichenkette, die kein a enthält und auf die kein a folgt und fang mit der Suche am Beginn der Zeichenkette an":
Code: Select all
^[^a]+(?!a)
This account is for sale
Vielen Dank für die Tips ohne RegEx!
@icfu
Ja genau, ein Lookahead, negiert, das hatte ich ausprobiert, aber das ging natürlich nicht, in dieser RegEx-Klasse (TRegExpr) habe ich es auch nicht gefunden.
Naja, schon mal (sehr) gut zu wissen, das! Danke icfu!
Wo muss man unterschreiben, dass die RegEx aktualisiert wird
Gruss franc
@icfu
Ja genau, ein Lookahead, negiert, das hatte ich ausprobiert, aber das ging natürlich nicht, in dieser RegEx-Klasse (TRegExpr) habe ich es auch nicht gefunden.
Naja, schon mal (sehr) gut zu wissen, das! Danke icfu!
Wo muss man unterschreiben, dass die RegEx aktualisiert wird

Gruss franc
Z.B. hier:Wo muss man unterschreiben, dass die RegEx aktualisiert wird
http://www.ghisler.ch/board/viewtopic.php?t=12405
Alextp nutzt in seinem Universal Viewer den Wrapper DIRegEx für PCRE, das wäre sicher auch was für den TC:
http://www.yunqa.de/delphi/doku.php/products/regex/
Icfu
This account is for sale
- ghisler(Author)
- Site Admin
- Posts: 50532
- Joined: 2003-02-04, 09:46 UTC
- Location: Switzerland
- Contact:
Sorry, z.Zt. ist keine Aenderung der RegEx-Engine geplant, weil ich nur eine interne (in Delphi) benutzen möchte. Nur so habe ich die volle Kontrolle über den Code, und vermeide Probleme mit vom User ausgetauschten DLLs.
Author of Total Commander
https://www.ghisler.com
https://www.ghisler.com
- ghisler(Author)
- Site Admin
- Posts: 50532
- Joined: 2003-02-04, 09:46 UTC
- Location: Switzerland
- Contact:
Leider unterstützt DIRegEx nur Delphi 4 oder neuer. Eine Portierung von TC auf eine neuere Delphi-Version liegt leider z.Zt. nicht drin, das würde viele Wochen in Anspruch nehmen und TC nur fetter und langsamer machen. 

Author of Total Commander
https://www.ghisler.com
https://www.ghisler.com
- ghisler(Author)
- Site Admin
- Posts: 50532
- Joined: 2003-02-04, 09:46 UTC
- Location: Switzerland
- Contact: