Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
On-the-fly Regex-Tester: Regex-Lab
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

On-the-fly Regex-Tester: Regex-Lab

beantworten | zitieren | melden

Hallo Community,

ich bin heute auf den Regex-Tester von cdr aufmerksam geworden und habe das zum Anlass genommen, einen eigenen verbesserten Regex-Tester zu schreiben, der mehr auf das experimentelle Erstellen von Regex abhebt. Deshalb habe ich das Programm Regex-Lab genannt.

Regex-Lab arbeitet on the fly. Das bedeutet, dass bei jeder Änderung des Pattern, des Input-Textes oder der Optionen/Einstellungen, die Auswirkungen sofort angezeigt werden.

Dabei wird der gefundene Text unterstrichen und die gefundenen Gruppen werden im InputText und in der Group-Liste farblich hervorgehoben. Man sieht also genau, von wo bis wo der Pattern und seine Teile (Groups) gematcht haben. Wenn eine Gruppe mehr als einen Capture hat, werden die Captures in der Farbe der Gruppe, aber mit wechselnder Helligkeit ausgegeben, so dass man auch hier sehen kann, von wo bis wo sich der Capture im Input-Text erstreckt.

Ich habe zwei Screenshots angehängt, durch die das deutlicher wird.

Version 0.02 (05.07.2006)

Verbesserungen:
  • Es gibt jetzt ein NumericUpDown-Feld zur Auswahl, der wievielte Match gefunden und angezeigt werden soll. Das ist quasi die on-the-fly-Version eines FindNext-Buttons.
  • Dieses NumericUpDown-Feld wird zur Erinnerung gelb eingefärbt, sobald ein anderer Wert als 1 eingestellt ist. Es wird rot, wenn nur deshalb kein Match gefunden wird, weil der eingestellte Wert zu hoch ist.
  • Erfolgt ein Match, wird der Cursor auf den Beginn des Matches gesetzt.
  • Wenn man eine Gruppe oder einen Capture auswählt, wird der Cursor auf den Beginn der gewählten Gruppe oder des gewählten Captures gesetzt.
  • Befindet sich die Cursorposition in einem der drei genannten Fälle außerhalb sichtbaren Bereichs, wird die Textbox so gescrollt, dass die Cursorposition in den sichtbaren Bereich kommt.
  • Die Option IgnoreCase ist voreingestellt.
  • Beim Eintragen der gefundenen Textstellen in die ListViews werden Whitespaces durch die Escapesequenzen ersetzt. Für einen Zeilenvorschub wird jetzt also \n angezeigt.
  • Die Anwendung startet mit leeren Feldern (statt mit Beispieltext und -pattern).
  • Die Tabstops sind jetzt etwas praktischer gesetzt.
  • Der Quelltext ist in der Zip-Datei enthalten.

Bekannte Einschränkungen:
  • Das Matchen geht normalerweise in Sekundenbruchteilen und wird daher im GUI-Thread ausgeführt. Wenn Pattern mit massivem Backtracking auf lange Input-Texte angewendet werden, kann es sein, dass die Anwendung für längere Zeit (bis eben der Match abgearbeitet wurde) nicht reagiert. Wird vermutlich in der Praxis nur äußerst selten vorkommen.

Tipps:
  • Beim Übernehmen des fertigen Pattern in den Programmcode muss man darauf achten, ...
  • dass die Flags (RegexOptions) im Code genauso gesetzt sind wie in Regex-Lab und
  • der Pattern bei der Übernahme in ein String-Literal richtig escaped wird:
    am besten man schreibt ein @ vor das String-Literal (siehe [FAQ] Was bedeutet das @ (=at) vor String-Literalen? Und: Wissenswertes zu Escape-Sequenzen), um sich eine Doppelung aller Backslashes (\) zu sparen, muss dann allerdings alle Anführungszeichen (") doppeln.

herbivore

PS: Fehler und Ungereimtheiten sind natürlich nicht ausgeschlossen. Für entsprechende Hinweise bin ich dankbar.

Stichworte: regexlab, regextester (bei Erscheinen von Version 0.06 war Version 0.02 596 mal heruntergeladen)

In einem anderen Beitrag weiter unten ist die neue Version 0.06 mit einigen kleinen Verbesserungen verfügbar. Ich empfehle diese neue Version herunterzuladen.
Attachments
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Screenshot 1
Attachments
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Screenshot 2
Attachments
private Nachricht | Beiträge des Benutzers
masta // thomas
myCSharp.de - Member

Avatar #avatar-2645.png


Dabei seit:
Beiträge: 36

beantworten | zitieren | melden

Hey herbivore,

das Tool kommt genau richtig, muss nämlich grad einen regulären Ausdruck auf Funktionalität mit viel und verschiedenem content testen.

Das Programm gefällt mir richtig gut, gerade durch das hervorheben der verschiedenen Elemente! Bisher auch kein Bug gefunden - werde ich wahrscheinlich auch nicht

Gruß
Thomas
we love C#...
private Nachricht | Beiträge des Benutzers
feadur
myCSharp.de - Member



Dabei seit:
Beiträge: 726
Herkunft: Bonn

beantworten | zitieren | melden

Vielen Dank für ein sehr schönes, nützliches Programm.
private Nachricht | Beiträge des Benutzers
Fabian
myCSharp.de - Member

Avatar #avatar-1590.jpg


Dabei seit:
Beiträge: 1994
Herkunft: Dortmund

beantworten | zitieren | melden

Hallo herbivore,

starkes Teil! Erleichtert einem die Arbeit mit RegEx doch ziemlich. Danke sehr!


Gruß,
Fabian
"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Hallo zusammen,

es ist eine neue Version verfügbar. Verbesserungen siehe oben.

Viel Spaß damit!

herbivore
private Nachricht | Beiträge des Benutzers
Xqgene
myCSharp.de - Member



Dabei seit:
Beiträge: 2189

beantworten | zitieren | melden

Hallo herbivore,

ich muss leider zugeben *schäm*, dass ich keine Ahnung von Regex habe. ;(

Wenn du dein Programm noch um eine Art Wysiwyg-Editor erweitern würdest, wäre ich maßlos glücklich

Gruß
Xqgene
"A programmer is a tool which converts coffein to code."

Evely ToDo-Manager 1.2 (Build 1.2.585)
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Hallo Xqgene,

in gewissem Sinne ist das Programm ja gerade ein Wysiwyg-Editor. Du tippst was ein und siehst sofort, was du bekommst.

Oder meinst du, dass man irgendwo z.B. "eine Ziffer" auswählen kann und er schreibt dann [0-9] bzw. \d in das Pattern-Feld? Das ist m.E. ein Job für die (übrigens auch in dieser Hinsicht sehr gute) SDK-/MSDN-Dokumentation. Und da ein solcher Modus schnell an seine Grenzen stößt, möchte ich damit gar nicht erst anfangen. Aber ich habe schon überlegt, eine F1 Übersichtshilfe einzubauen.

herbivore

Nachtrag: In der der Version 0.06 weiter unten ist die Übersichtshilfe eingebaut. Sie ist - wie gesagt - durch Drücken der F1-Taste zu erreichen. Hier ein Screenshot:
Attachments
private Nachricht | Beiträge des Benutzers
frisch
myCSharp.de - Member

Avatar #avatar-1724.gif


Dabei seit:
Beiträge: 2118
Herkunft: Coburg / Oberfranken

beantworten | zitieren | melden

Hallo herbivore,

n1! Mehr brauch ich dazu nicht sagen
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
private Nachricht | Beiträge des Benutzers
Xqgene
myCSharp.de - Member



Dabei seit:
Beiträge: 2189

beantworten | zitieren | melden

Ich dachte an so eine Toolbox, wo verschiedene Bausteine abgelegt sind (a lá VS). Eventuel sogar mit Option, selbst solche Bausteine zu definieren. Einige Bausteione können vielleicht als Container für andere dienen u.s.w. Diese Bausteine werden nacheinander auf das "Design-Feld" gezogen, ausgewählt, oder was auch imer gemacht, daraus wird ein Pattern generiert und mit deinem Programm gleich getestet.

mir ist schon klar, dass so ein Designer schnell an seine Grenzen stoßen kann...

gruß
Xqgene
"A programmer is a tool which converts coffein to code."

Evely ToDo-Manager 1.2 (Build 1.2.585)
private Nachricht | Beiträge des Benutzers
darefilz
myCSharp.de - Member



Dabei seit:
Beiträge: 124

beantworten | zitieren | melden

hi herbivore.
nettes Tool, wirklich!

was mir persönlich fehlt ist ein "find all matches"-Häkchen.
lässt sich das einbauen?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Hallo _void,

sorry, war in Urlaub.

Zu deiner Frage:

Einerseits ist es leicht, weil man ja nur Regex.Match durch Regex.Matches ersetzen müsste und den einen Match durch ein Match-Array. An allen Stellen, wo der Match verwendet wird, müsste man je nachdem alle oder das gewählte Match-Array-Element verwenden.

Andererseits wäre die Frage, wie die unterschiedlichen Matches unterschieden werden können, denn sie können ja wie die Gruppen und Captures auch nahtlos aneinanderstoßen. Mal abgesehen davon, dass ein Match selbst momentan "nur" unterstrichen wird, sind Farbton und Helligkeit zur Kennzeichnung schon "verbraucht".

Außerdem bräuchte man der Konsistenz wegen dann auch noch ein weiteres ListView für alle Matches und das scheint mir etwas überladen.

Wenn ich so ein Häkchen in die "offizielle" Version einbaue, würde ich es gerne konsistent und schön machen. Und einen solchen Weg sehe ich momentan nicht. Da aber der Quellcode beiliegt, wäre es für dich sicher relativ einfach, so ein Häkchen quick'n'dirty einzubauen.

Vielleicht noch der Hinweis, dass man mit dem NumericUpDown-Feld für die Nummer des Matches sehr schnell durch die einzelnen Matches laufen kann.

herbivore
private Nachricht | Beiträge des Benutzers
polofreak
myCSharp.de - Member

Avatar #avatar-1895.jpg


Dabei seit:
Beiträge: 181
Herkunft: D BW

beantworten | zitieren | melden

hey coole Sache! ist echt nicht schlecht, kannst dir ja mal überlegen das in den Softwarelinks von Wikipedia zu posten, denn da ist imho nichts wirklich tolles dabei.

private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Hallo zusammen,

als Regex-Lab heute wieder einmal gelobt wurde (vielen Dank), hat mich das motiviert eine neue Version zur Verfügung zu stellen.

Version 0.06 (20.08.2007)

Es gibt folgende kleine Verbesserungen (gegenüber Version 0.02):
  • Einfache Hilfe zu regulären Ausdrücken (aufzurufen über F1)
  • Zusätzliche Verwendung von grauer Hinterlegung für den gesamten Match (bisher wurde nur unterstrichen)
  • Standard-Kontext-Menü jetzt für alle Eingabefelder
  • Ctrl-A (alles markieren) funktioniert jetzt in allen Eingabefeldern
Die Hilfe ist eine einfache HTML-Datei. Dabei gibt es folgende Besonderheit: Die HTML-Datei ist einerseits in Regex-Lab einkompiliert und liegt andererseits als separate Datei bei. Die separate Datei wird also nicht benötigt; die Exe alleine reicht. Wenn aber die Datei regexlab.html im Anwendungsverzeichnis von Regex-Lab vorhanden ist, wird stattdessen diese geladen. So hat jeder die Möglichkeit, die Hilfe anzupassen und die für ihn wichtigen Punkte einzutragen oder die Beschreibungen zu ändern oder zu ergänzen.

Wegen der farblichen Gestaltung der Hilfe habe ich lange mit mir gerungen. Einerseits bin ich ja eigentlich ein Fan von schlichten Layouts. Anderseits bot sich natürlich an, die Farben, die Regex-Lab verwendet, in der Hilfe wieder aufzugreifen. Das habe ich letztlich auch getan. Wer die Hilfe weniger bunt haben will, kann jedenfalls auch das leicht realisieren.

Wer die Hilfe verbessert, kann gerne seine Version der regexlab.html hier anhängen.

herbivore

PS: Fehler und Ungereimtheiten sind natürlich nicht ausgeschlossen. Für entsprechende Hinweise bin ich dankbar.

PPS: Die Version ist von 2007, aber trotzdem aktuell. Sie ist naturgemäß für ein damals verfügbares Framework kompiliert. Sollte sie auf aktuellen Rechnern nicht laufen, kann man sich leicht eine Version für das aktuelle/gewünschte Framework compilierten, da der Quellcode enthalten ist (damit die Umlaute stimmen, muss man den Compiler anweisen, die Codepage 850 zu verwenden: /codepage:850)
Attachments
private Nachricht | Beiträge des Benutzers
Spontifixus
myCSharp.de - Member

Avatar #avatar-3052.gif


Dabei seit:
Beiträge: 408
Herkunft: Hannover

beantworten | zitieren | melden

Moin herbivore,

vielen Dank für dieses geniale Tool - wäre ich eher auf die Idee gekommen hier zu suchen, hätte mir das ne Menge Arbeit erspart...

Viele Grüße,
Markus
private Nachricht | Beiträge des Benutzers
DriZit
myCSharp.de - Member



Dabei seit:
Beiträge: 10

beantworten | zitieren | melden

auch von mir ein Dankeschön
private Nachricht | Beiträge des Benutzers
TheTwin
myCSharp.de - Member



Dabei seit:
Beiträge: 14

beantworten | zitieren | melden

Ich muss mich den dankesagungen anschließen!
Dein tool erleichtert einem das leben ungemein!
Vielen herzlichen dank und frohe weihnachten
private Nachricht | Beiträge des Benutzers
el_panter
myCSharp.de - Member



Dabei seit:
Beiträge: 406
Herkunft: Sömmerda

beantworten | zitieren | melden

Das Tool ist absolut spitze

nur ein makel... ich kann maximal 999 zeilen machen danch muss ich die bis dahin durchgetesteten rauslöschen und dan gehts erst weiter^^ ist aber nicht besonders schlimm

(bin gerade dabei alle relvanten zeilen auf etwaige abweichung hin zu überprüfen ~ 2500 zeilen) mustes also nicht ändern da sowas ehr die ausnahme ist was ich gerade mache
MfG Paul
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Hallo el_panter,

die Begrenzung ist Absicht. Ich hatte sie mit 999 m.E. schon mehr als großzügig gewählt. Da der Quellcode verfügbar ist, kannst du die Begrenzung natürlich selbst aufheben.

herbivore
private Nachricht | Beiträge des Benutzers
bytebrain
myCSharp.de - Member



Dabei seit:
Beiträge: 7
Herkunft: Zweibrücken

beantworten | zitieren | melden

Das ist ein sehr sehr starkes Teil! Hilft mir grad als Anfänger sehr gut! Klasse!

Vielen Dank!!


Gruß,
bytebrain
private Nachricht | Beiträge des Benutzers
EL_Broto
myCSharp.de - Member



Dabei seit:
Beiträge: 56

beantworten | zitieren | melden

hi herbivore

vll könntest du noch folgende sachen implementieren
[:alnum:warn:    	Alphanumerische Zeichen: [:alpha:warn: und [:digit:warn:.
[:alpha:warn: 	Buchstaben: [:lower:warn: und [:upper:warn:.
[:blank:warn: 	Leerzeichen und Tabulator.
[:cntrl:warn: 	Steuerzeichen. Im ASCII sind das die Zeichen 00 bis 1F, und 7F (DEL).
[:digit:warn: 	Ziffern: 0, 1, 2,... bis 9.
[:graph:warn: 	Graphische Zeichen: [:alnum:warn: und [:punct:warn:.
[:lower:warn: 	Kleinbuchstaben1: nicht notwendigerweise nur von a bis z.
[:print:warn: 	Druckbare Zeichen: [:alnum:warn:, [:punct:warn: und Leerzeichen.
[:punct:warn: 	Zeichen wie: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ .
[:space:warn: 	Whitespace: Horizontaler und vertikaler Tabulator, Zeilen- und Seitenvorschub, Wagenrücklauf und Leerzeichen.
[:upper:warn: 	Großbuchstaben1: nicht notwendigerweise nur von A bis Z.
[:xdigit:warn: 	Hexadezimale Ziffern: 0 bis 9, A bis F, a bis f.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Hallo EL_Broto,

das Regex-Lab soll ja hinsichtlich der Patternsyntax genau den Funktionsumfang von .NET haben. Daher ist es nicht sinnvoll, die Patternsyntax zu erweitern, denn es wäre ja unpraktisch, wenn man mit den Regex-Lab einen Pattern austüftelt könnte, der dann mit .NET gar nicht funktionieren würde.

herbivore
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1928
Herkunft: NRW

beantworten | zitieren | melden

Hallo!

Auch von mir mal ein Dankeschön an herbivore für dieses äußerst hilfreiche Tool. Hab's gerade zufällig beim stöbern im Forum entdeckt. Endlich kann man mal reg. Ausdrücke schnell testen.
Nobody is perfect. I'm sad, i'm not nobody
private Nachricht | Beiträge des Benutzers
FitzeFatze
myCSharp.de - Member



Dabei seit:
Beiträge: 10

beantworten | zitieren | melden

Hi,

das Programm ist wirklich spitze! Es ist übersichtlich, sehr komfortabel...einfach klasse!
Ein großes Dankeschön an herbivore.
private Nachricht | Beiträge des Benutzers
DeadEye
myCSharp.de - Member



Dabei seit:
Beiträge: 55
Herkunft: Vienna

beantworten | zitieren | melden

Danke fuer dieses geile Programm. Das erleichtert die Arbeit mit RegEx ungemein, ich will nicht mehr ohne dieses Tool arbeiten
Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop
private Nachricht | Beiträge des Benutzers
deerhunter
myCSharp.de - Member



Dabei seit:
Beiträge: 92

beantworten | zitieren | melden

Hallo herbivore!

Vielen Dank für dein tolles Tool.
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5409

beantworten | zitieren | melden

Hi!

- Kann man nicht was dranmachen, daß man erfolgreiche Tests, also einen bestimmten Input und ein Pattern, zusammen mit einer Bemerkung abspeichert? Manches braucht man doch mehrmals, oder Abwandlungen davon.
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Hallo ErfinderDesRades,

ein durchaus erwägenswerter Vorschlag. Ich werde mir überlegen, ob ich das einbaue.

herbivore
private Nachricht | Beiträge des Benutzers
frisch
myCSharp.de - Member

Avatar #avatar-1724.gif


Dabei seit:
Beiträge: 2118
Herkunft: Coburg / Oberfranken

beantworten | zitieren | melden

Hey herbivore,

mach lieber einen Button für "Copy to Clipboard" rein welches das Pattern in die Zwischenablage kopiert.
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
private Nachricht | Beiträge des Benutzers