Reguläre Ausdrücke in der Suche

German support forum

Moderators: white, Hacker, Stefan2

franc
Senior Member
Senior Member
Posts: 259
Joined: 2005-10-27, 14:09 UTC

Reguläre Ausdrücke in der Suche

Post by *franc »

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
MrGolgi
Member
Member
Posts: 153
Joined: 2007-06-12, 20:27 UTC
Contact:

Post by *MrGolgi »

Auszug aus der TC Hilfe:
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!
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.

Gruß MrGolgi

Gruß
Ein Pessimist ist ein Optimist mit Erfahrung
User avatar
StickyNomad
Power Member
Power Member
Posts: 1933
Joined: 2004-01-10, 00:15 UTC
Location: Germany

Post by *StickyNomad »

2franc
RegEx spreche ich leider nicht, aber je nachdem was Du genau bezweckst gehts vielleicht auch ohne:

Code: Select all

|*a*
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).
MrGolgi
Member
Member
Posts: 153
Joined: 2007-06-12, 20:27 UTC
Contact:

Post by *MrGolgi »

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
Ein Pessimist ist ein Optimist mit Erfahrung
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Sollte der Suchbegriff nicht fragen:
Finde mir eine Datei in der a nicht vorkommt?
Nein, Dein Suchausdruck bedeutet "Finde ein beliebiges Zeichen außer a" und dieses beliebige Zeichen ist in der Zeichenkette "a.a" der Punkt.

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)
Icfu
This account is for sale
franc
Senior Member
Senior Member
Posts: 259
Joined: 2005-10-27, 14:09 UTC

Post by *franc »

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
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Wo muss man unterschreiben, dass die RegEx aktualisiert wird
Z.B. hier:
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
regex
Junior Member
Junior Member
Posts: 38
Joined: 2007-07-19, 07:30 UTC

Post by *regex »

Bis die regulären Ausdrücke aufgebohrt sind, tut's wohl auch ^[^a]+$

:)

Gruß

Regex
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Aber nur mit Schmerzen... ;)

Icfu
This account is for sale
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 48083
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

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
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

DIRegEx ist keine DLL, sondern natives Delphi!
Bitte setz Dich mit Alextp in Verbindung, der wird Dir das sicher gerne erläutern.

Icfu
This account is for sale
franc
Senior Member
Senior Member
Posts: 259
Joined: 2005-10-27, 14:09 UTC

Post by *franc »

Eine gute (und nicht veraltete) RegEx-Implementierung würde doch so gut in den Total Commander passen!

Gruss franc
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 48083
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

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
franc
Senior Member
Senior Member
Posts: 259
Joined: 2005-10-27, 14:09 UTC

Post by *franc »

Wenn es eine Portierung des DIRegEx in Delphi 3 gäbe, wäre es also möglich?
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 48083
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Nein, ich verwende sogar noch Delphi 2!
Author of Total Commander
https://www.ghisler.com
Post Reply