Seite 1 von 2

Komplexe Suche mit regular expression [ERLEDIGT]

Verfasst: Fr, 29. Apr 2011 14:53
von Markus Walter
Hi,

vielleicht kann mir jemand helfen... Mein Editor (Ed4Win) kann eine komplexe Suche mit Hilfe von regular expressions. Und offenbar nur so...

Ich möchte eigentlich nix kompliziertes - über google wäre es ganz einfach :wink:

Ich möchte im Quelltext das Vorkommen einer Funktion xTest finden, wenn diese mit Parametern aufgerufen wird, aber nicht, wenn sie ohne Parameter aufgerufen wird. Also quasi (in google-Manier): "+xtest - xtest()".

Weiß jemand, wie man sowas mit einer regular expression hinkriegt?

Re: Komplexe Suche mit regular expression

Verfasst: Fr, 29. Apr 2011 15:13
von Tom
Auch ich würde mich über eine Antwort freuen. MultiEdit unterstützt RegEx ebenfalls, aber ich sitze regelmäßig vor den Erläuterungen und versuche, sie zu verstehen, um dann doch wieder "klassisch" zu suchen. :oops:

Re: Komplexe Suche mit regular expression

Verfasst: Fr, 29. Apr 2011 17:41
von Wolfgang Ciriack
Ich würde es mal mit
test(+[a-z]+)
versuchen.

Re: Komplexe Suche mit regular expression

Verfasst: Sa, 30. Apr 2011 16:42
von Markus Walter
Hi,

@Tom: Hm, speziell von Dir hatte ich eine Antwort erhofft, weil Du ja mal in einem Thread speziell die RegEx-Funktion Deines Editors gepriesen hast... :wink:

Code: Alles auswählen

test(+[a-z]+)
@Wolfgang: Der Ausdruck findet z. B. Strings, in denen "test" vorkommt, ausser wen an den String "test" direkt eine Klammer anschliesst... Aber das ist ja nicht das, was ich brauche...

Speziell die Tatsache, dass ich nach Funktionsaufrufen suche und dabei die Klammern eine Rolle spielen, macht das Ganze komplizierter, da Klammern bei RegEx-Ausdrücken gewisse Funktionen haben...

Re: Komplexe Suche mit regular expression

Verfasst: Sa, 30. Apr 2011 17:00
von Martin Altmann
Markus,
dann musst Du die Klammern "escapen"!
Beispiel:

Code: Alles auswählen

test\(+[a-z]+\)
Viele Grüße,
Martin

Re: Komplexe Suche mit regular expression

Verfasst: Sa, 30. Apr 2011 17:04
von Markus Walter
Hi Martin,

guter Hinweis. Danke. Wenn Du jetzt noch weisst, wie ich quasi negiere (siehe meine obige Anforderung), würde ich Dich in mein Nachtgebet einschließen...

Re: Komplexe Suche mit regular expression

Verfasst: Sa, 30. Apr 2011 17:10
von Martin Altmann
Vielleicht die Zeichen in ^ einschließen... :?:

Viele Grüße,
Martin

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 12:42
von Markus Walter
Oh Mann, RegEx ist eine ziemliche Katastrophe, wenn man viel mit "Sonderzeichen" zu tun hat (Klammern, Anführungszeichen, ...)

Warum kann mein Editor nicht eine einfache Notiation wie alle Suchmaschinen... :banghead:

Mein aktueller Fall:

Code: Alles auswählen

xTest() - soll nicht gefunden werden
xTest(xVar) - soll gefunden werden
xTest("Hugo") - soll gefunden werden
xTest({..}) - soll gefunden werden
Das ist mit RegEx nicht wirklich lustig. Ich glaube, ich gebe es auf...
Aber trotzdem danke.

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 12:55
von Martin Altmann
Hmm,

Code: Alles auswählen

xTest\(.*\)
Wenn das auch xTest() liefert, dann vielleicht:

Code: Alles auswählen

xTest\(..*\)
Viele Grüße,
Martin

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 13:14
von Wolfgang Ciriack
Also in meinem brief-Editor klappt es mit

Code: Alles auswählen

xtest([~)]
Das findet
xtest("Hugo")
xtest(xVar)
xtest({b})
aber nicht xtest()

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 13:26
von Markus Walter
@Martin+Wolfgang: Auch diese Vorschläge funktionieren nicht, liefern aber unterschiedliche Ergebnisse..

@Wolfgang: Komisch, dass das bei Dir klappt, aber bei mir nicht?! Ich kann in meinem Editor 4 verschiedene "Regular Expression Dialect"s einstellen. Bei "Posix", "ED" und "ED Org" wird Dein Vorschlag als nicht regelkonform abgewiesen, bei "MS Visual Developer RE" lässt er sich ausführen, findet aber nur xTest() und eben gerade nicht xTest(xValue) oder xTest("Hugo"). Ich müsste den Ausdruck also ggf. verneinen...

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 13:28
von brandelh
Hi,

mein MED findet mit Martins: ctest\(+[a-z]+\)

alle cTest(???) - also mit Inhalt, aber keine cTest() - nun soll aber genau das Gegenteil gesucht werden, wie kann man das mit ^ negieren. Damit habe ich keinen Erfolg.
Wolfgangs Ausdruck: ctest([~)] gibt bei mir aber einen Klammerfehler, ctest([~)]) findet nichts.
Markus Walter hat geschrieben:findet aber nur xTest() und eben gerade nicht xTest(xValue) oder xTest("Hugo"). Ich müsste den Ausdruck also ggf. verneinen...
MED: ctest\(+[a-z]+\) findet cText(egal was) aber nicht cText() !

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 13:36
von Markus Walter
brandelh hat geschrieben:MED: ctest\(+[a-z]+\) findet cText(egal was) aber nicht cText() !
Negativ. Das findet bei mir zwar xTest(xValue), aber nicht xTest("Hugo"). Wohl wegen des Anführungszeichen, das müsste wohl noch in die Auflistung a-z (und ggf. noch weitere, z. B. der Unterstrich). Bei so einer Notation läuft man also doch Gefahr, "Sonderfälle" zu übersehen...

Kennt jemand wenigstens eine gute Dokumentation über die RegEx?

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 13:40
von Wolfgang Ciriack
Ich wusste ja schon immer, dass mein 20 Jahre alter brief-Editor gut ist :wink: :D

Ich hab noch mal nachgesehen, der verwendet eine brief-eigene regular expression Suche :(

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 13:41
von brandelh
Hallo Markus,

stimmt das " wurde ausgespart, daher habe ich das versucht und es hat auch die cTest("Egon") gefunden:

Code: Alles auswählen

ctest\(+["-z]+\)
findet bei mir im MED:

cTest([Egal])
cTest('Egal')
cTest("Egal")

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 14:13
von Markus Walter
brandelh hat geschrieben:stimmt das " wurde ausgespart, daher habe ich das versucht und es hat auch die cTest("Egon") gefunden:

Code: Alles auswählen

ctest\(+["-z]+\)
findet bei mir im MED:

cTest([Egal])
cTest('Egal')
cTest("Egal")
Schon viel besser, aber noch immer nicht perfekt...
Findet z. B. eine Stelle wie: wTest()+cValue oder wIrgendwas(wTest()), d. h. die runde Klammer zu und das Plus-Zeichen liegen wohl zwischen ["-z]...

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 14:19
von brandelh
Na du bist aber anspruchsvoll ;-)

Wenn es viel Text ist und die Bedingung zu übel hilft nur ein kleines Programm, das die betreffenden Zeilen ausfiltert.
Ich nehme dazu dann PowerBasic ConsoleCompiler ;-)

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 14:27
von Wolfgang Ciriack
Was macht denn

Code: Alles auswählen

ctest\(+["-z^\)]

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 14:30
von Tom
Hier findet man u.a. ausführliche Erklärungen zu RegEx:

http://wiki.multiedit.com

(nach "Regular Expressions" suchen)

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 14:34
von Markus Walter
Wolfgang Ciriack hat geschrieben:Was macht denn

Code: Alles auswählen

ctest\(+["-z^\)]
Das findet bei mir auch wieder xTest(), neben denen, die es finden sollte...

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 14:47
von Wolfgang Ciriack
Und

Code: Alles auswählen

ctest\(+["-z][^\)]
?

Re: Komplexe Suche mit regular expression

Verfasst: Mo, 02. Mai 2011 17:40
von Markus Walter
Hi Wolfgang,

findet weniger Stellen als das vorherige, aber immernoch die wTest()...

Re: Komplexe Suche mit regular expression [ERLEDIGT]

Verfasst: Mi, 04. Mai 2011 12:08
von Markus Walter
Hi,

es ist eigentlich ganz einfach... (wie immer wenn man es weiß) :D

Code: Alles auswählen

wTest\(~\)
Das ~-Zeichen negiert, somit wird mit o. a. Syntax kein wTest() gefunden, sehr wohl aber Aufrufe mit Parameter. Problematisch wären jetzt noch Leerzeichen, z. B. wTest( ). Aber da bin ich beim Codieren recht ordentlich...

Re: Komplexe Suche mit regular expression [ERLEDIGT]

Verfasst: Mi, 04. Mai 2011 12:36
von brandelh
Markus Walter hat geschrieben:Problematisch wären jetzt noch Leerzeichen, z. B. wTest( ). Aber da bin ich beim Codieren recht ordentlich...
wenn nicht, könnte man das aber ja auch ganz einfach mit Suchen & Ersetzen korrigieren ;-)
xyz( ) -> xyz() -> wiederholen, bis nichts mehr gefunden wird :D

Re: Komplexe Suche mit regular expression [ERLEDIGT]

Verfasst: Mi, 04. Mai 2011 14:18
von Markus Walter
Hi,

klar Hubert, wenn man es denn weiß...

Ich möchte einiges an Code-Refactoring betreiben. Hier bieten moderne IDEs mächtige Möglichkeiten (z. B. Eclipse). Zumindest brauche ich eine verlässliche Suchmöglichkeit, sonst kann ich ja auch kein Suchen+Ersetzen betreiben...