Programmname: Regextester
Motivation
Regular Expressions sind ein phänomenal mächtiges und effizientes Instrument zum Durchsuchen von Text, und zum Textersatz.
Die Syntax von Regex-Ausdrücken ist aber überaus kryptisch, weshalb man kaum einen Regex entwickeln kann, ohne mehr oder weniger umfangreiche Tests.
Es lohnt sich sehr, sich in Regex einzuarbeiten, beispielsweise das Tutorial von link_275 durcharbeiten (mein Upload enthält "nur" eine Referenz-Dokumentation).
Freie Regextester gibt es viele, aber keiner erfüllte meine Ansprüche an Features (wohl der übliche Grund, sich ein Tool zu coden ;)).
OpenSource
Ursprünglich wollte ich das Teil im ShowRoom veröffentlichen, weiles weniger eine Veröffentlichung von Code ist (isses natürlich auch), sondern eine ziemlich ausprogrammierte, produktiv einsetzbare Anwendung.
Und weil der ShowRoom die hier zutreffende Kategorie "Tools" hat.
Aber der ShowRoom ist ClosedSource-Projekten vorbehalten, und so isses halt hier gelandet - ist auch ok. Hauptsache ich kann in Foren darauf verlinken, wennes um Regex geht ;).
Das Projekt habich 2006 fertiggestellt, und nutze es seither. Meine Überarbeitung für den Upload bestand v.a. darin, aus der "Helpers.Dll" (die ich in allen meinen 2005er Projekten verwendete) alles rauszuwerfen, was speziell der Regextester nicht braucht.
Die Dlls "Helpers" und "TreeListview" sind auf meinem damaligen Stand stehengeblieben. Heute würde ich viiieles anders machen, schon weil VB2010 erheblich bessere Möglichkeiten bietet. Aber auch kommentiert habich damals relativ mies.
Das alles ordentlich zu überarbeiten lohnt sich aber nicht, weilich VB2005 nicht mehr nutze - und:
"never change a running system!"
Ist allerdings ein bischen schade, denn es sind durchaus interessante Konzepte enthalten, die so natürlich schwerer zu verstehen sind - sorry Leute!
Features/Bedienung
Issues
(Kleiner Hint: Man sieht - der Punkt "StartUp" ist inzwischen besonders hervorgehoben ;))
History/Updates
Anforderungen
Programmiert ist es unter VisualStudio 2010, und zwar fürs Framework4 - Client Profile. Wer also mit VB2010 (Minimum Express Edition), entwickelt, sollte auch hiermit arbeiten können.
Edit: Jetzt habe ich auch einen DownGrade auf 2008 beigefügt.
Erläuterung des ScreenShots
Ist leider schon sehr fachsimpelig, die Erläuterung, aber ich hoffe, auch die Regex-Noobs kriegen einen Schimmer von was Regex leisten kann:
In 'ToParse' ist der Auszug eines Text-DatenFiles eingepastet. Im TreeListview ist der 2. Match geöffnet, und zeigt die 2 enthaltenen Gruppen an: die erste Gruppe enthält einen Buchstaben, (welcher im Sinn-Kontext des ToParse-Textes einen Schlüssel-Wert bedeutet), und die 2. Gruppe den Inhalt der Rechteck-Klammer.
Da die 2. Gruppe des 2. Matches im Treelistview selektiert ist, wurde im ToParse-Text auch genau der Text markiert, aus dem dieser GruppenInhalt stammt, und im Searchpattern die dazugehörige GruppenDefinition.
Weiters wurde der Search-Pattern kommentiert, denn diese popeligen 20 Zeichen habens schon ganz schön in sich ;).
Beachte auch die Option 'IgnoreCase', die bewirkt, dass die erste Gruppe auch auf Großbuchstaben matcht , obwohl sie in Kleinbuchstaben formuliert ist.
Motivation
Regular Expressions sind ein phänomenal mächtiges und effizientes Instrument zum Durchsuchen von Text, und zum Textersatz.
Die Syntax von Regex-Ausdrücken ist aber überaus kryptisch, weshalb man kaum einen Regex entwickeln kann, ohne mehr oder weniger umfangreiche Tests.
Es lohnt sich sehr, sich in Regex einzuarbeiten, beispielsweise das Tutorial von link_275 durcharbeiten (mein Upload enthält "nur" eine Referenz-Dokumentation).
Freie Regextester gibt es viele, aber keiner erfüllte meine Ansprüche an Features (wohl der übliche Grund, sich ein Tool zu coden ;)).
OpenSource
Ursprünglich wollte ich das Teil im ShowRoom veröffentlichen, weiles weniger eine Veröffentlichung von Code ist (isses natürlich auch), sondern eine ziemlich ausprogrammierte, produktiv einsetzbare Anwendung.
Und weil der ShowRoom die hier zutreffende Kategorie "Tools" hat.
Aber der ShowRoom ist ClosedSource-Projekten vorbehalten, und so isses halt hier gelandet - ist auch ok. Hauptsache ich kann in Foren darauf verlinken, wennes um Regex geht ;).
Das Projekt habich 2006 fertiggestellt, und nutze es seither. Meine Überarbeitung für den Upload bestand v.a. darin, aus der "Helpers.Dll" (die ich in allen meinen 2005er Projekten verwendete) alles rauszuwerfen, was speziell der Regextester nicht braucht.
Die Dlls "Helpers" und "TreeListview" sind auf meinem damaligen Stand stehengeblieben. Heute würde ich viiieles anders machen, schon weil VB2010 erheblich bessere Möglichkeiten bietet. Aber auch kommentiert habich damals relativ mies.
Das alles ordentlich zu überarbeiten lohnt sich aber nicht, weilich VB2005 nicht mehr nutze - und:
"never change a running system!"
Ist allerdings ein bischen schade, denn es sind durchaus interessante Konzepte enthalten, die so natürlich schwerer zu verstehen sind - sorry Leute!
Features/Bedienung
- beliebig viele Samples: 'Sample' nenne ich einen Datensatz, bestehend aus:
Sample-Name, SearchPattern, ReplacePattern, ToParse-Text, RegexOption und Kommentar
Diese Samples werden gespeichert, und man kann sie anwählen und den Regex-Test jederzeit reproduzieren.
Samples werden gelöscht durch Anwählen des RowHeaders der Samples-Liste, und dann [Entf] drücken.
Zufügen eines leeren Samples, indem in die letzte leere Zeile der SampleListe ein Sample-Name eingetragen wird - Eine frei wählbare DatenDatei ist hinterlegt, in die die aktuelle Entwickler-Arbeit per Menü oder beim Schließen automatisch gespeichert wird. Will man die DatenDatei beim Schließen nicht überschreiben, so schließe man die App mit 'Menü-Quit-NoSave'
- mehrzeilig entwickeln, mit eingerückten Klammer-Ebenen: Man kann den SearchPattern über mehrere Zeilen verteilen, und so die Wirkungsweise einzelner Buchstaben-Gruppen leichter verstehen. Bei Mehrzeiligkeit erfolgt eine automatische Einrückung der Klammer-Ebenen.
- Dokumentation zur Regex-Syntax: - über den Button 'Reference'
- Muster verdoppeln: Button 'CloneSample' kopiert das aktuelle Sample, und fügt es der Samples-Auflistung an. Ich empfehle, jedem Sample (also auch dem Klon) sofort einen aussagekräftigen Namen zu geben
- BedienungsAnleitung: - Button 'Manual'
- Export berücksichtigt VB-Syntax mit den doppelten Quotes: Button 'Export' öffnet den Standard-Editor des Systems, und schreibt den SearchPattern als Einzeiler hinein. In Rein-Version und in VB-Version, welche die VB-Syntax berücksichtigt, nach der ein ein Quote ["] innerhalb eines Strings verdoppelt werden muß, um den Compiler nicht zu verwirren.
Vom Standard-Editor kann der SearchPattern in die Anwendung kopiert werden. - Darstellung der Matches im Treelistview: - Der TreeListview stellt sowohl die GesamtMatches als auch ihre Untergruppen dar. Wählt man eine Gruppe an, wird sowohl im SearchPattern als auch im geparsten Text die Entsprechung markiert (siehe Screenshot und Erläuterung)
- Button 'ResetFonts' stellt die ursprünglichen Fonts der Richtextboxen wieder her, falls durch Einpasten von Richtext auch Richtext-Formatierungen übernommen wurden (Farben, Größen, etc), die bei der Textanalyse nur stören würden.
'ResetFonts' ist also eher ein Workaround als ein Feature, weil ichs den Richtextboxen bei Copy&Paste nicht abgewöhnen kann, auch die Formatierungen des Textes zu übernehmen, wenn die Zwischenablage richtext-formatierten Text enthält
Issues
(Kleiner Hint: Man sieht - der Punkt "StartUp" ist inzwischen besonders hervorgehoben ;))
- Ein untestbarer SearchPattern: Die Anwendung hat Richtextboxen eingebaut. Richtextbox codiert einen Zeilvorschub nicht mit \r\n, sondern nur mit \n. Das kann zu bösen Fehlern führen, wenn man Zeilvorschübe matchen will, die in der Produktiv-Umgebung evtl mit \r\n codiert sind. Der RegexPattern, der sowohl \r\n matcht, als auch \n , lautet: \r?\n
- flexibles Layout: Alle Arbeitsflächen des Guis sind zwar verschiebbar, aber u.U. muß man an mehreren Splittern herumschieben, um die Aufteilung nach Wunsch hinzukriegen. Ich bin jetzt aber zu faul, das zu verbessern, zumal ich denke, eine perfekte Lsg für jeden UseCase wird sich nicht finden lassen.
- StartUp: Der Form-Designer kann erst geöffnet werden, nachdem die Solution erstmalig erstellt wurde. Andernfalls sind die eingebundenen Dlls (die ja zunächst nur als Source vorliegen) nicht verfügbar.
- CompilerWarnungen: RodFromGermany spricht CompilerWarnungen an
Die meisten habe ich jetzt behoben, nur die Warnung
Compiler schrieb:
Die CountChars-Funktion gibt nicht für alle Codepfade einen Wert zurück. Fehlt eine Return-Anweisung?
History/Updates
- 5.4.11: CompilerWarnungen bearbeitet, 1 Bug behoben
- 27.5.11: Exes für FW3.5 (VB2008) und FW4 (VB2010) zugefügt
Anforderungen
Programmiert ist es unter VisualStudio 2010, und zwar fürs Framework4 - Client Profile. Wer also mit VB2010 (Minimum Express Edition), entwickelt, sollte auch hiermit arbeiten können.
Edit: Jetzt habe ich auch einen DownGrade auf 2008 beigefügt.
Erläuterung des ScreenShots
Ist leider schon sehr fachsimpelig, die Erläuterung, aber ich hoffe, auch die Regex-Noobs kriegen einen Schimmer von was Regex leisten kann:
In 'ToParse' ist der Auszug eines Text-DatenFiles eingepastet. Im TreeListview ist der 2. Match geöffnet, und zeigt die 2 enthaltenen Gruppen an: die erste Gruppe enthält einen Buchstaben, (welcher im Sinn-Kontext des ToParse-Textes einen Schlüssel-Wert bedeutet), und die 2. Gruppe den Inhalt der Rechteck-Klammer.
Da die 2. Gruppe des 2. Matches im Treelistview selektiert ist, wurde im ToParse-Text auch genau der Text markiert, aus dem dieser GruppenInhalt stammt, und im Searchpattern die dazugehörige GruppenDefinition.
Weiters wurde der Search-Pattern kommentiert, denn diese popeligen 20 Zeichen habens schon ganz schön in sich ;).
Beachte auch die Option 'IgnoreCase', die bewirkt, dass die erste Gruppe auch auf Großbuchstaben matcht , obwohl sie in Kleinbuchstaben formuliert ist.
Dieser Beitrag wurde bereits 18 mal editiert, zuletzt von „ErfinderDesRades“ () aus folgendem Grund: Update, Änderungen am Artikel