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:

beantworten | zitieren | melden

Hallo frisch,

hm, dass man einen fertigen Pattern oftmals kopieren will, versteht sich von selbst. Aber wenn man eh gerade den Pattern editiert hat, reicht dazu Ctrl-A und dann Ctrl-C. Daher werde ich die aufs Wesentliche konzentrierte Oberfläche nicht durch so einen Button "verschandeln". :-)

Da jedoch der Quellcode vorliegt, kann sich natürlich jeder leicht selbst so einen Button einbauen.

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

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5409

beantworten | zitieren | melden

Ah, Quellcode!
Habich gar nicht erkannt.
Für mich ist Quellcode, wenn eine .sln oder wenigstens eine .csproj vorliegt.
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
0815Coder
myCSharp.de - Member



Dabei seit:
Beiträge: 770

beantworten | zitieren | melden

Ich verwende das schon seit einiger Zeit, einfach spitze.

Trotzdem 2 Verbesserungsvorschläge:

1. Manchmal will man im Input mehrere Beispiel-Strings halten, und einzeln auswerten. Fein wärs, wenn hier wie beim Sql-Management-Studio nur der gerade markierte Teil ausgewertet wird (bzw, alles, wenn nichts markiert ist).

2. Undo Funktion Strg-Z im Input um Änderungen rückgängig machen zu können...
loop:
btst #6,$bfe001
bne.s loop
rts
private Nachricht | Beiträge des Benutzers
vornst
myCSharp.de - Member



Dabei seit:
Beiträge: 1

beantworten | zitieren | melden

Hi,

kleiner Verbesserungsvorschlag:

nebem der Textbox für die Eingabe der Pattern befindet sich das NumericUpDown-Control um zwischen den Matches umschalten zu können.

Genial wäre es nicht zwischen den Matches umschalten zu müssen, sondern die Anzeige der Groups als unterelemente von Matches farbig in einem Treeview mit mehreren Spalten anzuzeigen.
Das Control gibt es meines Achtens schon.

Vielleicht gefällt es ja.

Gruß
vornst
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 0815Coder,

es ist ja nicht meine Art, auf Vorschläge nicht (oder auch nur spät) zu reagieren. Ich habe denn auch schon angefangen ein Undo einzubauen, bin aber leider beim Testen hängen geblieben. Es wird noch ein bisschen dauern. Damit wäre Punkt 2 zumindest auf dem Weg.

Punkt 1 werden ich nicht einbauen. Das halte ich für zu spezifisch und auch für zu verwirrend, wenn man nur aus Versehen etwas markiert hat. Wenn du diese Funktion haben willst, ist es aber Dank des Quellcodes ein Leichtes, sie für dich selbst einzubauen.


Hallo vornst,

die Groups werden in einem mehrspaltigen ListView farbig angezeigt. In den Groups sind nur noch die Captures enthalten. Diese werden ebenfalls in einem mehrspaltigen ListView angezeigt, wenn man eine Group in dem ersten ListView auswählt. Außerdem wird bei der Auswahl einer Group in dem ListView in der Input-TextBox nur noch diese Group farbig angezeigt. Da es nur diese zwei Hierarchieebenen gibt (die Schachtelung der Gruppen innerhalb des Patterns ist ja im Match nicht abgebildet), sehe ich keinen Nutzen in einem TreeView, eher im Gegenteil. Aus meiner Sicht ist genau das, was du willst, implementiert. Es ist nur technisch ein wenig anders umgesetzt.

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



Dabei seit:
Beiträge: 14

beantworten | zitieren | melden

hi herbivore , klasse tool. so lernt man die formatierungen schneller
private Nachricht | Beiträge des Benutzers
Mighty Panther
myCSharp.de - Member

Avatar #avatar-2821.jpg


Dabei seit:
Beiträge: 22

Danke

beantworten | zitieren | melden

Hallo herbivore!

Auch von meiner Seite, vielen Dank für das RegEx-Lab.

LG
Mighty
private Nachricht | Beiträge des Benutzers
TiTime
myCSharp.de - Member



Dabei seit:
Beiträge: 68

beantworten | zitieren | melden

ein spitze Tool, dass kann man einfach nur weiter empfehlen. Auch wenn du es schon 1000 mal gehört hast. Dankeschön!
private Nachricht | Beiträge des Benutzers
TiltonJH
myCSharp.de - Member

Avatar #avatar-3134.png


Dabei seit:
Beiträge: 88
Herkunft: Leipzig

beantworten | zitieren | melden

hallo,

ich möchte mich hier meinen Vorrednern anschließen!

Aber eine frage hätte ich dann doch noch gerne, als dann mal geschaut hab wie du das geschrieben hast stelle sich mir die frage: warum is die quellcode-datei in der dos codepage (437)? bei mir werden die umlaute alle falsch dargestellt.

MfG
"In der Informatik geht es genauso wenig um Computer wie in der Astonomie um Teleskope."
Edsger W. Dijkstra

The Humble Programmer by Edsger W. Dijkstra
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 TiltonJH,

die Codepage ist 850 :-) Wobei man der Gerechtigkeit halber sagen muss, dass die Unterschiede zu 437 nur Zeichen betrifft, die ich nicht verwendet habe.

Man kann Quellcode-Dateien in jeder beliebigen Codepage erstellen und muss dem Compiler dann nur sagen welche Code-Page man verwendet hat (z.B. /codepage:850).

Der Grund, dass ich 850 verwende, liegt einfach darin, dass ich (schon immer) auf der Kommandozeile arbeite und auch einen Kommandozeilen-Editor verwende. Was ISO-8859-1 für Windows-Anwendungen ist, ist Codepage 850 für Kommandozeilen-Programme.

Den Code könnte man mit einem einfachen C#-Programm leicht von 850 nach ISO-8859-1 konvertieren. Dazu müsste man ihn nur mit dem einen Encoding einlesen und dem anderen Encoding schreiben.

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

Avatar #avatar-3134.png


Dabei seit:
Beiträge: 88
Herkunft: Leipzig

beantworten | zitieren | melden

Hallo herbivore,

die problematik des encoding ist mir schon bekannt, aber mit 850 hast wohl sicher recht.
es war eigentlich mehr die frage, ob das so gewollt war/ist.

ein solches c#-programm gibt es schon, ich werde das wohl gleich hier mal als projekt veröffentlichen.

hab da aber noch was anderes: in der regexlab.html ist auf zeile 123 ein fehler. da steht: "\<name>" es sollte aber wohl "\k<name>" heißen.

MfG

TiltonJH
"In der Informatik geht es genauso wenig um Computer wie in der Astonomie um Teleskope."
Edsger W. Dijkstra

The Humble Programmer by Edsger W. Dijkstra
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 TiltonJH,
Zitat
es war eigentlich mehr die frage, ob das so gewollt war/ist.
nein, das war nicht unbedingt gewollt. Wenn ich dran denke, verwende ich bei der nächsten Version Encoding.Default.
Zitat
da steht: "\<name>" es sollte aber wohl "\k<name>" heißen.
Danke für den Hinweis. Ja, das k ist mir an sich tatsächlich verloren gegangen. Aber ich habe es gerade mal ausprobiert. Man braucht kein k anzugeben; \<name> funktioniert also auch. Deshalb werde ich es wohl so stehen lassen, zumal mir die Syntax ohne k besser gefällt und ich sie auch einleuchtender bzw. besser zu merken finde.

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



Dabei seit:
Beiträge: 92

beantworten | zitieren | melden

Hallo herbivore,

auch von mir vielen Dank für dieses tolle Programm!
Es hat mir meine Arbeit sehr erleichtert!

mfg Cuin
private Nachricht | Beiträge des Benutzers
gordon2001
myCSharp.de - Member



Dabei seit:
Beiträge: 219
Herkunft: Mecklemburg-Vorpommern

beantworten | zitieren | melden

Muss mich hier auch nochmal bedanken. Das Tool hilft mir so unglaublich beim entwickeln von Regex parsern. Vielen vielen Dank!
private Nachricht | Beiträge des Benutzers
Hotte
myCSharp.de - Member



Dabei seit:
Beiträge: 32

beantworten | zitieren | melden

Hallo Herbivore und alle anderen,

ich habe das Programm ein wenig meinen Bedürfnissen angepasst.
Jetzt wäre meine Frage, ob ich es hier auch wieder veröffentlichen darf.
Ich würde es natürlich mit Code zur freien Verwendung einstellen.
Wäre das in Ordnung bzw. besteht da überhaupt ein Interesse?

Ein paar Kleinigkeiten sind zwar noch nicht fertig, aber es kann nicht mehr wahnsinnig lange dauern bis es so weit ist.
Attachments
Viele Grüße

Hotte
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 Hotte,

freut mich, dass du das Regex-Lab weiterentwickelt hast und deine Version und deine Code hier veröffentlichen willst. Natürlich ist das alles nicht nur erlaubt, sondern auch erwünscht.

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



Dabei seit:
Beiträge: 32

beantworten | zitieren | melden

Hi Herbivore,

super, dann werde ich in Kürze einen Thread aufmachen und das Ganze einstellen.
:o)

EDIT: RegEx Studio
Viele Grüße

Hotte
private Nachricht | Beiträge des Benutzers
C#ler
myCSharp.de - Member



Dabei seit:
Beiträge: 50

beantworten | zitieren | melden

Hallo Herbivore,

auch wenn es schon oft gesagt wurde, kann ich nur wiederholen, wie nützlich das Tool ist.
Vielen Dank für deine Arbeit!

C#ler
In theory, there is no difference between theory and practice. But, in practice, there is.

The nice thing about the Java API is that if you don't like it, just wait two minutes — it will change. Doug Lyon
private Nachricht | Beiträge des Benutzers
BlackMatrix
myCSharp.de - Member



Dabei seit:
Beiträge: 220

beantworten | zitieren | melden

Sehr nützliches Tool, vielen Dank.

Eine Frage hätte ich bzgl. Der Verwendung von
Zitat
""

bzw.
Zitat
\".


Es ist ja üblich, dass man Pattern in der Form:

string pattern = @"pattern";

schreibt und die Anführungszeichen dann nicht durch
Zitat
\"
sondern durch
Zitat
""
angegeben werden.

Besteht die Möglichkeit, dies auch im Tool so zu verwenden oder muss man nachträglich die die Anführungsstriche ersetzen?
ersetzen?

Liebe Grüße,

BlackMatrix

Edit:

Beim Einfügen von einem langen string in das InputControl habe ich folgende Fehlermeldung erhalten:
Fehler
System.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
bei System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
bei System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.RichTextBox.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von BlackMatrix am .
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 BlackMatrix,

die Escape-Sequenzen brauchst du nur innerhalb von String-Literalen. Das hat mit Regex nichts zu tun. Da Regex-Lab die Eingabe in einem Eingabefeld entgegen nimmt, brauchst du keine der Escape-Sequenzen, die nur für String-Literale im Quellcode erforderlich sind, zu verwenden.

Diese Escape-Sequenzen musst du erst dann einfügen, wenn du den (fertigen) Pattern aus Regex-Lab in ein String-Literal im Quelltext übernimmst. Dafür gibt es in Regex-Lab keine Unterstützung.

Meine Empfehlung ist, für Regex-Pattern im Quellcode immer das @ vor dem String-Literal zu verwenden. Dann beschränken sich die Nacharbeiten auf das Doppeln der Anführungszeichen, das man leicht vor Hand oder - besonders bei längeren Pattern mit vielen Anführungzeichen - per Suchen-und-Ersetzen im Editor vornehmen kann.

Trotzdem steht es natürlich jedem, der möchte, offen, Regex-Lab um eine entsprechende Funktion zu erweitern. Der Quelltext liegt ja vor.

Wegen der Exception-Meldung wäre es nett, wenn du mir eine PM mit einer genauen Beschreibung, was du wie gemacht hast (wie lang war der String, wie lang war die längste Zeile, gab es Besonderheiten, lässt sich der Fehler reproduzieren usw.) schicken könntest. Vielen Dank!

Es ist bekannt, dass RichtextBoxen von sich aus Probleme mit sehr langen Zeilen (ohne Leerzeichen) haben. Das kann jeder in Notepad ausprobieren. Üblicherweise führt das aber nur zu endlosen Wartezeiten nicht zu abstürzen. Daher mein Wunsch nach genaueren Informationen per PM.

EDIT: Laut BlackMatrix ist der Fehler bisher nur ein einziges Mal aufgetreten und ist nicht reproduzierbar. Daher erfolgen erstmal keine weiteren Maßnahmen.

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

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4318
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Auch mir hat das Teil sehr bei der Ausarbeitung von Ausdrücken geholfen (und nochmal ein Dank an herbivore).

Nur so als Tipp: Wenn ein Ausdruck im Tester funktioniert... aber im .Net Code nicht, dann kann es eigentlich fast nur daran liegen, dass per Default im Tester IgnoreCase geflaggt ist... (Habe ich dann nach mehr als 20 minütiger Suche auch irgendwann festgestellt).
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
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 Programmierhans, hallo zusammen,

danke für den Hinweis! Ich habe diesen bzw. die die folgenden Tipps in Kurzform in den Startbeitrag aufgenommen.

Klar, man sollte alle Flags so übernehmen, wie sie in Regex-Lab gesetzt sind bzw. wie man sie in Regex-Lab gesetzt hat. Bzw. sollte man die Flags in Regex-Lab gleich so setzen, wie man sie später im Code haben möchte.

Aus meiner Sicht gibt es einen weiteren Grund, warum ein Pattern, der in Regex-Lab funktioniert, im Code nicht auf Anhieb funktioniert, nämlich wenn man ihn in ein String-Literal schreibt, ohne richtig zu escapen. Um nicht jeden enthaltenen Blackslash verdoppeln zu müssen, bietet es sich an, vor das String-Literal ein @ zu schreiben (siehe [FAQ] Was bedeutet das @ (=at) vor String-Literalen? Und: Wissenswertes zu Escape-Sequenzen). Selbst dann muss man allerdings noch darauf achten, wenn im Pattern Anführungszeichen (insbesondere zwei Anführungszeichen hintereinander) enthalten sind. Anführungszeichen müssen in String-Literalen mit @ gedoppelt werden, um sie zu escapen.

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

Avatar #avatar-2570.gif


Dabei seit:
Beiträge: 54

beantworten | zitieren | melden

Geiles Teil,

schmiert auch bei codepoints außerhalb der Basic Multilingual Plane (BMP) nicht ab, habe heute erst Expresso damit zum Absturz gebracht, während Regex-Lab einen astreinen capture hatte.

Meine regex: [\u0009\u000a\u000d\u0020-\ud7ff\ue000-\ufffd]|([\ud800-\udbff](?=[\udc00-\udfff]))|((?≤[\ud800-\udbff])[\udc00-\udfff])

Mein Input: (codepoint 128685)
~~yb~~~~~~~~~~~~~~
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 yetibrain,

das freut mich zu hören. Ich möchte mich jedoch nicht mit fremden Federn schmücken. Das Lob gebührt den Entwicklern des .NET-Framworks, deren Regex-Methoden ich lediglich aufrufe.

herbivore
private Nachricht | Beiträge des Benutzers