Laden...

Benutzeroberflächen für das Erzeugen von Regex-Pattern und Code

Erstellt von BlackMatrix vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.230 Views
B
BlackMatrix Themenstarter:in
218 Beiträge seit 2012
vor 11 Jahren
Hinweis von herbivore vor 11 Jahren

Im folgenden ist wohl Ziffer statt Zahl gemeint.

Benutzeroberflächen für das Erzeugen von Regex-Pattern und Code

Hi.

Ich bin auf der Suche nach allem möglichen was ich an GUI und Code für die Erstellung von Pattern für Reguläre Ausdrücke finden kann.
Meine Anwendung muss von einem Nichtinformatiker bedient werden können und dieser muss selbständig Pattern erzeugen ohne die notwendigen Kenntnisse über Reguläre Ausdrücke zu haben.

Meine eigenen Gedanken, die mir dazu eingefallen sind, wären:

  • Textbox die das vollständige Pattern anzeigt (für erfahrenere Bediener)
  • Buttons, die die jeweilige Art von Zeichen in die Textbox einfügt (z.B. Button für Ziffer, Button für Buchstabe)
  • Control um die Anzahl eingeben zu können (z.B. Combobox auf "5" und "Button Ziffer" gedrückt => Pattern für 5 aufeinanderfolgende Ziffern)
  • etc.

Also kurz gesagt GUI und Code für das Erstellen von Regulären Ausdrücken.

Ich bin über jede Hilfe dankbar.

D
615 Beiträge seit 2009
vor 11 Jahren

Hallo BlackMatrix

Dieses Tool gibt es bereits :

http://www.ultrapico.com/Expresso.htm

Beste Grüsse

Diräkt

(ggf. kannst ja mal den Reflector benutzen 😉 )

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo BlackMatrix,

ich bin der Meinung dass sich auch Nichtinformatiker mit einem "leichten" Tool wie z.B. dem On-the-fly Regex-Tester: Regex-Lab und dessen F1-Hilfe zurecht finden werden - v.a. vermute ich dass sie damit schneller ans Ziel kommen werden, als mit z.B. Expresso, da dessen Umfang und Möglichkeiten zu umfangreich sind.

Da deine Frage konkret nach GUI und Code gerichtet ist, würde ich somit das ähnlich aufbauen wie es mit dem Regex-Lab der Fall ist.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo BlackMatrix,

bei der Entwicklung von Regex-Lab stand ich vor den gleichen Frage. Allerdings war (und ist) meine Zielgruppe Programmierer. Daher war für mich die Entscheidung zwischen einem schlichten und einfachen und einem aufwändigen und komplexen GUI, ganz einfach zu treffen. Für mich war der Kompromiss, die von gfoidl angesprochene F1-Hilfe, die einem bei der Syntax hilft, wenn man mal was vergessen hat.

Auf der anderen Seite weiß ich, dass sich leider sogar viele Programmierer schwer tun, wenn sie das erste mal mit Regex konfrontiert werden. Um so mehr wird das also für Nichtinformatiker gelten. Insofern kann ich deinen (deren) Wunsch nach einem GUI, dass man ohne Kenntnis der Regex-Syntax bedienen kann, verstehen.

Anderseits wird das auf viele Buttons und Auswahlmöglichkeiten hinauslaufen, wie man das ja bei Expresso sieht. Um so mehr, wenn man wirklich alle Möglichkeiten von Regex anbieten will. Ein Kompromiss könnte hier sein, dass zum einen immer das Eingabefeld für die direkte Regex-Eingabe angezeigt wird, auch wenn man dieses über die Buttons füllt, so dass man jederzeit zwischen den beiden Eingabemöglichkeiten wechseln kann und dass zudem nur die Buttons für die wichtigsten Konstrukte zur Verfügung stehen und dass man fortgeschrittenere Konstrukte (z.B. Look-Aheads) nur per Direkt-/Texteingabe eingeben kann. Dann bleibt das GUI übersichtlich und ermöglicht dem geübten Benutzer trotzdem alles.

Praktisch wird die Eingabe über Buttons aber erst, wenn auch ein paar Komfortfeatures dabei sind, z.B. dass man einen Zahlenbereich eingeben kann, und daraus automatisch der Pattern generiert wird, der auf Zahlen aus diesem Bereich passt, z.B. (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) für den Zahlenbereich von 0-255. Ohne das bleibt es bei einer 1:1 Umsetzung von Regex-Syntax-Feature zu Button, wie bei "\d" und Button "Ziffer".

Was die Darstellung angeht, kannst du mal in Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch schauen, ob du ReadableRegex wirklich lesbarer findest, als den Pattern in normaler Regex-Syntax (siehe Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch für einen direkten Vergleich bzw. Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch für eine besser formatierte Version des Regex-Patterns sowie eine textuellen Beschreibung).

Das Problem aller "lesbaren" Varianten von Regex-Pattern ist, dass diese im Vergleich schrecklich aufgebläht und länglich sind, so dass die reine Länge sie schon wieder schwerer lesbar macht, ohne dass man wirklich auf eine höhere Abstraktionsebene kommt. Durch eine (ein-/aufklappbare) Baumdarstellung wie von Expresso, gewinnt man immerhin ein kleines bisschen was an Strukturübersicht. Wobei man diese auch - und vielleicht sogar noch besser - gewinnen würde, wenn man den Benutzer den Pattern bei RegexOptions.IgnorePatternWhitespace selbst sinnvoll formatieren lässt.

herbivore

B
BlackMatrix Themenstarter:in
218 Beiträge seit 2012
vor 11 Jahren

Ich danke euch für die genannten Links und die Einblicke in die Regex Entwicklung. Einen Dekompiler kann man über Expresso laufen lassen. Lässt sich einfach rekonstruieren.

Eine Frage zur angesprochenen Komfortfunktionalität hätte ich noch. Gerade für die Entwicklung solcher Zahlenbereiche, wie geht man da bei der Entwicklung am besten vor? Geht da Lesbarkeit vor DRY Prinzip? Ich muss z.B. einen Zahlenbereich von 19-204 entwickeln. Gibt es dafür keine andere Möglichkeit als einfach jede einzelne Ziffer der Zahl durchzugehen und abchecken, ob dies nicht schon durch ein vorher definiertes Pattern gematcht wird?

Liebe Grüße.

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo BlackMatrix,

ich denke das mit den Zahlenbereichen bekommt man lesbar und (relativ) DRY hin. Im Grunde muss man ja nur den einen Bereich in mehrere zusammenhängende so aufteilen, dass man für die einzelnen Bereiche direkt ein Pattern angeben kann, also in deinem Beispiel 19, 20-99, 100-199, 200-204, also 19|[2-9]\d|1\d\d|20[0-4].

herbivore

B
BlackMatrix Themenstarter:in
218 Beiträge seit 2012
vor 11 Jahren

Dank dir, das leuchtet ein und erspart Zeit 😉