[BUG] - Fehler bei der Implementierung von Reg.Expr. im TC!

German support forum

Moderators: Hacker, Stefan2, white

divejbba
Junior Member
Junior Member
Posts: 12
Joined: 2006-06-30, 17:14 UTC

[BUG] - Fehler bei der Implementierung von Reg.Expr. im TC!

Post by *divejbba »

Hallo,

ich möchte mittels Reg.Expr. bestimmte Phrasen innerhalb von Textdateien finden. Als Bsp. folgendes Szenario:
Inhalt der Beispieltextdatei 1
asdf
adf abb abb abb bla
sdf
Inhalt der Beispieltextdatei 2
asdf
adf abb abb zbb
sdf
Wie man leicht erkennen kann, enthält Textdatei 1 dreimal die Phrase 'abb'. Im Gegensatz zur Textdatei 1, welche die Phrase nur zweimal enthält.

Folgende Reg.Expr. '(abb\s+){2}' sollte doch nun eigentlich die Datei 2 herausfiltern können, da ja dort das Suchmuster eben nur 2 mal vorkommt. TC zeigt aber beide Textdateien (Datei 1 und 2) an.

Frage:
Habe ich einen Denkfehler bei der Erstellung der Reg.Expr., oder ist das ein Implementierungsfehler der Reg.Expr. innerhalb des TCs?


MfG
divejbba
Last edited by divejbba on 2006-07-06, 20:56 UTC, edited 1 time in total.
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

(abb\s+){2} ist das gleiche wie (abb\s+)(abb\s+).

Probier's mal mit (abb\s+){3}.

Icfu
This account is for sale
divejbba
Junior Member
Junior Member
Posts: 12
Joined: 2006-06-30, 17:14 UTC

Post by *divejbba »

Das versteh ich nicht.

'{n}' drückt doch eigentlich aus (laut Hilfe [*1] vom TC), dass der Ausdruck in den Klammern eben genau n mal vorkommen soll und nicht n-1 mal. Ist dann die Hilfe falsch, oder wie?
[*1] Ausschnitt aus der TC-Hilfe
{n} Zeichen kommt genau n-mal vor
{n,} Zeichen kommt mindestens n-mal vor
{n,m} Zeichen kommt mindestens n-mal, max. m-mal vor
Außerdem will ich nicht die Datei 1 haben. Also nicht die Datei mit den 3 mal 'abb' drin, sondern nur die Datei 2. Gesucht ist also eine Reg.Expr., die mir die Datei 2 liefert.

MfG
divejbba
divejbba
Junior Member
Junior Member
Posts: 12
Joined: 2006-06-30, 17:14 UTC

Post by *divejbba »

icfu wrote:
Gesucht ist also eine Reg.Expr., die mir die Datei 2 liefert.
Du machst wohl den Denkfehler, daß Du glaubst, daß (abb\s+){2} NICHT die Dateien findet, in denen der Ausdruck dreimal vorkommt, das ist aber falsch. Nach den ersten beiden Treffern wird gar nicht mehr weitergesucht.
ACK. Du willst also sagen, dass '(abb\s+){2}' deshalb Datei 1 und 2 liefert, da in beiden mind. 2 mal die gesuchte Phrase enthalten ist. Aber warum steht dann in der TC-Hilfe "{n} Zeichen kommt GENAU n-mal vor" und nicht "{n} Zeichen kommt MIND. n-mal vor"? Ich hatte immer gedacht, dass greedy (gierig) heißt, dass dann weitergesucht wird.

Kann ich dann das von mir gewünschte Ziel nicht mittels Reg.Expr. erreichen?
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Aber warum steht dann in der TC-Hilfe "{n} Zeichen kommt GENAU n-mal vor" und nicht "{n} Zeichen kommt MIND. n-mal vor"?
Das GENAU bezieht sich ausschließlich auf den TEILAUSDRUCK, der links vom {n} steht. TC bricht aber die Suche des GESAMTAUSDRUCKS ab, sobald ein Treffer vorliegt.

Das GENAU hat also nur dann die Bedeutung, die Du verstehst, wenn rechts neben {n} auch noch was steht.

Icfu
This account is for sale
Juergen
Power Member
Power Member
Posts: 517
Joined: 2003-05-02, 18:19 UTC
Location: Berlin (Germany)
Contact:

Post by *Juergen »

icfu wrote:Nach den ersten beiden Treffern wird gar nicht mehr weitergesucht.
Genau so sehe ich das auch.
Aber dann stimmt die Aussage in der TC-Hilfe (Hervorhebung von mir)

Code: Select all

{n} Zeichen kommt GENAU n-mal vor
nicht.
Denn wenn nach n Treffern nicht mehr weitergesucht wird, kann rein von der Logik her nur die Aussage gemacht werden, dass die betr. Zeichenkette MINDESTENS n-mal vorkommt. Wie oft die Zeichenkette im Rest des Textes noch vorkommt ist ja nicht bekannt, wenn dieser Rest gar nicht mehr untersucht wird ...

Gruß, Jürgen
My add-ons and plugins for TC: NiftyLink, mbox, Sequences
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Siehe Posting über Deinem...

In InfoRapid Suchen und Ersetzen wird beim Anhaken von "nur ganze Wörter" auch nur die o.g. Datei 2 gefunden, wenn man den Ausdruck (abb\s+){2} anwendet.

Im TC scheint da ein Bug vorzuliegen sehe ich gerade, denn wenn man hier "nur ganze Wörter" anhakt und nach (abb\s+){2} sucht, wird stattdessen nur die Datei 1 gefunden, also die mit 3 abb drin, das ist definitiv falsch.

Das muß sich ghisler anschauen, keine Ahnung...

Icfu
This account is for sale
divejbba
Junior Member
Junior Member
Posts: 12
Joined: 2006-06-30, 17:14 UTC

Post by *divejbba »

icfu wrote:Im TC scheint da ein Bug vorzuliegen sehe ich gerade, denn wenn man hier "nur ganze Wörter" anhakt und nach (abb\s+){2} sucht, wird stattdessen nur die Datei 1 gefunden, also die mit 3 abb drin, das ist definitiv falsch.
D.h. Dir fällt auch keine Möglichkeit mittels Reg.Expr. ein, wie ich nun anhand der Phrase 'abb' nur Datei 2 erhalte?
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Nope, sorry. Schreib ein [BUG] in den Threadtitel, damit ghisler sich das anschaut und bis das Problem gefixt ist, probier's mit InfoRapid.

Icfu
This account is for sale
Juergen
Power Member
Power Member
Posts: 517
Joined: 2003-05-02, 18:19 UTC
Location: Berlin (Germany)
Contact:

Post by *Juergen »

icfu wrote:Siehe Posting über Deinem...
Ja ... Als ich mein Posting schrieb war das von dir noch nicht da. :)

Ich bin mir allerdings nicht sicher, ob ich dein obiges Posting verstehe. :oops:
Du schreibst dort u.a.:
Das GENAU hat also nur dann die Bedeutung, die Du verstehst, wenn rechts neben {n} auch noch was steht.
Müsste es dann nicht mit den Regulären Ausdrücken

Code: Select all

(abb\s+){2}.
oder

Code: Select all

(abb\s+){2}[a|z]
so funktionieren, wie divejbba es sich gedacht hatte? Aber auch nit diesen Reg.Expr. findet der TC beide Dateien. :?

Gruß, Jürgen
My add-ons and plugins for TC: NiftyLink, mbox, Sequences
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

(abb\s+){2}[a|z] findet

abb abb a
und
abb abb z

Völlig in Ordnung.

| brauchst Du in eckigen Klammern nicht zur Angabe von Alternativen, hat keine Spezialbedeutung.

Icfu
This account is for sale
divejbba
Junior Member
Junior Member
Posts: 12
Joined: 2006-06-30, 17:14 UTC

Post by *divejbba »

Also weder '(abb\s+){2}.' noch '(abb\s+){2}[a|z]' gibt mir die 2. Datei zurück. Oder habe ich schon wieder was falsch verstanden?
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Nein, hast Du richtig verstanden.

Icfu
This account is for sale
Juergen
Power Member
Power Member
Posts: 517
Joined: 2003-05-02, 18:19 UTC
Location: Berlin (Germany)
Contact:

Post by *Juergen »

icfu wrote:(abb\s+){2}[a|z] findet

abb abb a
und
abb abb z

Völlig in Ordnung.
Ah, jetzt verstehe ich.
icfu wrote:| brauchst Du in eckigen Klammern nicht zur Angabe von Alternativen, hat keine Spezialbedeutung.
OK, danke.

Gruß, Jürgen
My add-ons and plugins for TC: NiftyLink, mbox, Sequences
Juergen
Power Member
Power Member
Posts: 517
Joined: 2003-05-02, 18:19 UTC
Location: Berlin (Germany)
Contact:

Post by *Juergen »

divejbba wrote:Also weder '(abb\s+){2}.' noch '(abb\s+){2}[a|z]' gibt mir die 2. Datei zurück. Oder habe ich schon wieder was falsch verstanden?
Das ist ja merkwürdig, denn bei mir findet TC mit beiden Ausdrücken jeweils beide Dateien. Wenn man in der Suchergebnis-Liste eine Datei markiert, und dann 2 mal F3 drückt, zeigt der TC an, worauf er "angesprungen" ist.

Gruß, Jürgen
My add-ons and plugins for TC: NiftyLink, mbox, Sequences
Post Reply