RegExp-Kurs 01: Motivation

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

RegExp-Kurs 01: Motivation

Beitrag von Meillo » 03.04.2022 19:14:44

Kursuebersicht


Teil 01: Motivation

Wozu braucht man ueberhaupt REs?

Einfach gesagt kann man mit REs Text suchen. Was ihr alle kennt ist eine Stringsuche, d.h. eine ganz normale Textsuchfunktion: Man gibt ein Wort ein und sucht dieses im Text. Leider ist diese Suchmoeglichkeit etwas begrenzt in ihrer Faehigkeit.

Durchsuchen wir doch mal Text nach `Samstag'. Anschliessend sollten wir wohl eine zweite Suche starten, um den gleichen Text auch nach `Sonnabend' zu durchsuchen. Es waere schoener wenn wir beides mit einer Suche erledigen koennten. REs koennen das. In dem Fall ist es nur eine kleine Arbeitsersparnis.

Wie war das nochmal mit dem Namen Maier? Schreibt man den mit `ai' oder `ei' oder mit `ay' oder `ey' oder nur mit `y'? Hier sind es schon fuenf verschiedene Suchen, die wir ausfuehren muessen. Mit REs nur eine.

Nun suchen wir nach dem Ortsnamen `Au'. Das ist zwar nur eine Suche, aber sie liefert uns leider auch `Auge', `Auto', usw. Wir wollen aber nur Treffer bei denen `Au' ein eigenstaendiges Wort ist. Mit REs ist das einfach. Mit Stringsuchen geht es nur falls das jeweilige Programm es zufaellig anbietet.

In einem Logfile interessieren uns alle Zeilen, die mit `incoming' beginnen. Wenn `incoming' irgendwo sonst innerhalb der Zeile vorkommt interessiert es uns nicht. Eine solche Unterscheidung ist mit einer Stringsuche nicht moeglich.

Bis hierhin kann man mit Stringsuchen die Suchprobleme auch loesen, wenngleich mitunter mehrere Suchen noetig sind oder das Suchresultat auch unerwuenschte Treffer enthaelt.

Die folgenden Suchprobleme koennen mit Stringsuchen nicht geloest werden, mit REs aber sehr wohl.

Negativ-Suchen: Alle Zeilen in denen das Wort `debug' nicht enthalten ist. Stringsuchen koennen nur positiv suchen, also all die Stellen finden, wo das Suchwort steht, aber sie koennen nicht die Stellen finden wo es nicht steht.

Zahlen: Es sollen alle numerischen Werte gesucht werden ... oder noch genauer: alle dreistelligen Zahlenwerte -- unmoeglich mit einer Stringsuche.

Komplexe Formate, wie Datumsformate und ueberhaupt alles was variable Anteile hat.

REs koennen all diese Suchprobleme mit Leichtigkeit loesen.


Aufgaben

1) Welche Suchprobleme hattest du schon, die du entweder nicht loesen konntest oder fuer die du viel Handarbeit investieren musstest?

2) Kennst du Programme, deren Stringsuche (ohne REs) mehr kann als nur stupide nach einem Suchwort zu suchen? Oft kann man z.B. die Unterscheidung von Gross-/Kleinschreibung an- und abschalten. Was ist dir da schon begegnet?

3) An was fuer Anwendungsfaelle denkst du wenn du ``Regulaere Ausdruecke'' hoerst?


Schreibt eure Antworten und Gedanken gerne in den Thread und tauscht euch aus. Vielleicht hat ihr noch ein tolles Beispiel, das ich bislang nicht auf dem Schirm habe.


(Naechste Woche wird's dann konkreter.)
Use ed once in a while!

paedubucher
Beiträge: 938
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: RegExp-Kurs 01: Motivation

Beitrag von paedubucher » 04.04.2022 00:04:45

Meillo hat geschrieben: ↑ zum Beitrag ↑
03.04.2022 19:14:44
Aufgaben

1) Welche Suchprobleme hattest du schon, die du entweder nicht loesen konntest oder fuer die du viel Handarbeit investieren musstest?
Bei Google und vielen anderen Online-Suchmaschinen ist die Suche nach Begriffen, welche Operatoren wie z.B. das + verwenden nicht ganz optimal. Wenn man z.B. in einer Bibliothek (im Sinne von Buchverleih) online nach "C++" sucht, wird das "+" oft als Operator interpretiert. Zwei "+" hintereinander sind dann ein Syntaxfehler. Ich musste also nach C suchen und dann das rausfiltern, was wirklich C++ war. Aber auch die Suche nach Programmiersprachen mit nur einem Buchstaben (C, D, R) gestaltet sich oft schwer. Wenn man das mit "Programming Language" ergänzt, hat man die Suche automatisch schon auf englische Werke beschränkt. Das möchte ich beispielsweise auf Amazon.com nicht.
Meillo hat geschrieben: 2) Kennst du Programme, deren Stringsuche mehr kann als nur stupide nach einem Suchwort zu suchen? Oft kann man z.B. die Unterscheidung von Gross-/Kleinschreibung an- und abschalten. Was ist dir schon schon begegnet?
Ich habe früher oft mit Eclipse gearbeitet. Die eingebaute Suchfunktion ist recht mächtig, ja unterstützt sogar RegExp. Viele mächtige Texteditoren haben auch eine "Case Insensitive"-Option. Heutzutage suche ich selten mir der Suchfunktion der IDE, sondern habe ein Terminal offen, worin ich grep oder rg (Debianripgrep) verwende. Das ist IDE-unabhängig. Öffne ich das Terminal innerhalb der IDE, kann ich dann trotzdem mit Ctrl-Klick die Dateien komfortabel öffnen, welche ein Suchergebnis beinhalten.
Meillo hat geschrieben: 3) An was fuer Anwendungsfaelle denkst du wenn du ``Regulaere Ausdruecke'' hoerst?
Ist eine Benutzereingabe eine Zahl, eine E-Mail-Adresse, eine Telefonnummer? Ist der angegebene Variablenname gültig?

EDIT: erst0r :D
Zuletzt geändert von paedubucher am 04.04.2022 11:01:06, insgesamt 1-mal geändert.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
ralli
Beiträge: 4380
Registriert: 02.03.2008 08:03:02

Re: RegExp-Kurs 01: Motivation

Beitrag von ralli » 04.04.2022 08:59:55

Hallo @Meillo,

als erstes möchte ich Dir danken für Deine Arbeit, um uns die regulären Ausdrücke näher zu bringen.


Zu 1:

Na ja, das manuelle Suchen ist ja mühselig und zeitaufwendig. Vor allen Dingen, wenn man nicht genau weiß, wo sich die gesuchte Datei oder Bibliothek befindet. Auch dann, wenn ich in Erfahrung bringen möchte, ob eine bestimmte Bibliothek überhaupt vorhanden ist, oder möglicherweise nachinstalliert werden muß. Oder ob beim Booten ein Treiber geladen und initialisiert wurde.

Zu 2:

find

grep (von Ken Thompson)

Beide Suchtools sind in den Distris an Bord und vorinstalliert.

zu 3:

Selber kann ich das Spectrum und Potenzial der Suchmöglichkeiten der Suchtools grep oder find nicht ansatzweise ausschöpfen, da ich sie nicht genug kenne.

Ich benutze grep, um aus dmesg einen Begriff herauszufiltern und find meistens, wenn ich eine Bibliothek oder bestimmte Datei suche, auch um den Speicherort des Suchbegriffs ausfindig zu machen. Das da viel mehr möglich ist, ist mir völlig klar. Deshalb begrüße ich das Angebot und danke dafür.

Grüße ralli
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

buhtz
Beiträge: 1209
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: RegExp-Kurs 01: Motivation

Beitrag von buhtz » 04.04.2022 14:05:00

Zu der Auflistung, was mit RegEx geht, was mit klassischer Stringsuche nicht geht, würde ich noch die Kombination von Negativ- und Positiv-Suche mit aufnehmen; bzw. die Suche plus dem Rest. Somit kann man nämlich Strings nicht nur "suchen" und ggf. ausschneiden, sondern eben auch an definierten Stellen schneiden ohne Teile zu verlieren.

1) Welche Suchprobleme hattest du schon, die du entweder nicht loesen konntest oder fuer die du viel Handarbeit investieren musstest?

Ich musste eine bestimmte Form von Links (Emacs org-roam), genauer die URL und das Label, in unbestimmter Anzahl finden.

2) Kennst du Programme, deren Stringsuche (ohne REs) mehr kann als nur stupide nach einem Suchwort zu suchen? Oft kann man z.B. die Unterscheidung von Gross-/Kleinschreibung an- und abschalten. Was ist dir da schon begegnet?

Im unixoiden Umfeld ist das grep und locate. Im weiteren Umfeld fallen mir Literatur-Datenbanken (PubMed, WebOfScience, Scopus, etc) ein.

3) An was fuer Anwendungsfaelle denkst du wenn du ``Regulaere Ausdruecke'' hoerst?

Wissenschaftliche Literatur-Datenbanken mit deren Suchoberflächen mit RegEx Support wären glaub ich ganz cool. Laut dem RefHunter-Manual gibt es derzeit wohl auch keine. Das höchste der Gefühle in diesem Kontext sind Wortabstandsoperatoren.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
frox
Beiträge: 969
Registriert: 06.08.2004 16:29:44
Wohnort: Köln

Re: RegExp-Kurs 01: Motivation

Beitrag von frox » 04.04.2022 16:12:13

Vorab:
Mit sowas wie RegExp habe ich mich noch absolut nie bewusst beschäftigt. :oops:

1) Welche Suchprobleme hattest du schon, die du entweder nicht loesen konntest oder fuer die du viel Handarbeit investieren musstest?

Ich suche meist über locate.
Wenn ich, sagen wir mal, auf der Suche nach einem bestimmten Ordner aus dem Jahre 2020 mit "locate 2020" nach einer Jahreszahl suche, werde ich teilweise mit der Ausgabe erschlagen.
Da reichen zehn Hörbücher mit je ca. 300 mp3 und ich scrolle mir einen gepflegten Wolf.
Schön wäre es, vorab eingrenzen zu können: Nur im Text von Ordnernamen im Verzeichnis XY suchen, und auch ausschließlich Ordnernamen (mit Pfad) ausgeben.

2) Kennst du Programme, deren Stringsuche (ohne REs) mehr kann als nur stupide nach einem Suchwort zu suchen? Oft kann man z.B. die Unterscheidung von Gross-/Kleinschreibung an- und abschalten. Was ist dir da schon begegnet?

Locate halt.

3) An was fuer Anwendungsfaelle denkst du wenn du ``Regulaere Ausdruecke'' hoerst?

Suchen? *g*
Gruß, Fred

Die Zeit salzt alle Wunden

Benutzeravatar
TRex
Moderator
Beiträge: 8325
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: RegExp-Kurs 01: Motivation

Beitrag von TRex » 04.04.2022 16:28:19

1) Welche Suchprobleme hattest du schon, die du entweder nicht loesen konntest oder fuer die du viel Handarbeit investieren musstest?

Ich würde mich gerne an die Zeit zurückerinnern, wo ich noch keine regulären Ausdrücke kannte... seitdem ist es eher eine Frage von "wie kompliziert muss der Ausdruck sein und welche PCRE-Features kenne ich noch nicht?" geworden. Es gibt eine mathematische Aussage darüber, dass man jede noch so komplexe Linie mit einer Formel beschreiben kann. Ich glaube, dass das auch für reguläre Ausdrücke gilt, und es liegt an mir, ob ich eine IPv4-Adresse mit ([0-9]{1,3}\.?){4} beschreibe oder es "richtig" mache, und wenn letzteres, dann wie effizient.

2) Kennst du Programme, deren Stringsuche (ohne REs) mehr kann als nur stupide nach einem Suchwort zu suchen? Oft kann man z.B. die Unterscheidung von Gross-/Kleinschreibung an- und abschalten. Was ist dir da schon begegnet?

So fuzzy matching oder Wissensnetzwerke... das wär schon nett zu haben, aber nein, nie nach geschaut. Ich dachte auch, dass locate relativ stupide sei und maximal Groß-/Kleinschreibung ignorieren kann.

3) An was fuer Anwendungsfaelle denkst du wenn du ``Regulaere Ausdruecke'' hoerst?

Alles, was irgendwie mit Textsuche, Parsing und Ersetzung zu tun hat... also zur Not ist das auch der Hammer in der Hand, bei dem alles nach einem Nagel aussieht - darum hole ich mir gerne ne Zweitmeinung, bevor ich irgendwo nen komplizierten regulären Ausdruck einbaue, den außer mir keiner mehr versteht. Klassiker war (wie so oft) ein Ausdruck, welcher einige Jahre lang in einem Softwareprodukt von ganz hinten (DB-API) bis ganz vorne (Frontend, Regex vom Backend ausgeliefert) die Passwortrichtlinien konsistent kontrolliert hat. Nachteil: es konnte nicht erklären, wieso ein Passwort nicht ausreicht.
Ich hab auch schon Code mit nem regulären Ausdruck umformatiert :lol:
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
tegula
Beiträge: 440
Registriert: 04.06.2004 13:51:04
Lizenz eigener Beiträge: MIT Lizenz

Re: RegExp-Kurs 01: Motivation

Beitrag von tegula » 04.04.2022 17:56:51

2) Kennst du Programme, deren Stringsuche (ohne REs) mehr kann als nur stupide nach einem Suchwort zu suchen? Oft kann man z.B. die Unterscheidung von Gross-/Kleinschreibung an- und abschalten. Was ist dir da schon begegnet?
  • Im "Suchen und Ersetzen"-Dialog von LibreOffice Writer kann man auswählen, ob zwischen Groß- und Kleinschreibung unterschieden werden soll. Außerdem kann man dort entscheiden, ob die Suche sich auf ganze Wörter beschränken oder Wortbestandteile mit einbeziehen soll. Es scheint auch möglich zu sein statt nach dem eigentlichen Text, nach dessen bestimmten Formatierung oder Formatvorlage zu suchen (hab ich bisher aber noch nie probiert)
  • In R kann (nach Installation von Debianr-cran-stringr oder Debianr-cran-tidyverse) mittels stringr::str_starts überprüft werden, ob eine Zeichenkette mit einem bestimmten Suchbegriff beginnt oder nicht. Ebenso kann mittels stringr::str_ends überprüft werden, ob eine Zeichenkette mit einem bestimmten Suchbegriff endet oder nicht. Als Ergebnis wird ein Wahrheitswert (TRUE oder FALSE) zurückgegeben, den man dann z. B. innerhalb von Rekodier-Anweisungen verwenden kann.
    3) An was fuer Anwendungsfaelle denkst du wenn du ``Regulaere Ausdruecke'' hoerst?
    Suchen sowie Suchen&Ersetzen.

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: RegExp-Kurs 01: Motivation

Beitrag von whisper » 04.04.2022 18:35:11

Zu 1 und 3:
das anonymisieren von eMail Headern.
Also ein Script, was einen beliebigen email Header nimmt und nach einfachen Vorgaben anonymisiert, damit der Header in einem Forum DSGVO konform :roll: am besten.
Ok, ich fantasiere nur, liegt in der Ferne.
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Christoph Franzen
Beiträge: 197
Registriert: 22.08.2005 19:58:49
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Aachen

Re: RegExp-Kurs 01: Motivation

Beitrag von Christoph Franzen » 05.04.2022 00:58:56

Das hier paßt nicht ganz zur Frage 1, weil ich ja „immer schon“ bei komplizierteren Dingen auf reguläre Ausdrücke zurückgegriffen habe, aber selbst dann stößt man auf Probleme:

Es gibt nicht nur ein paar Varianten, sondern die unterscheiden sich auch in der „Gefräßigkeit“, so ist die bei sed nicht umschaltbar, was man aber oft braucht, wenn man suchen und ersetzen – also auf das Suchergebnis bezugnehmen will und die Ausdrücke kommen sich in der Praxis oft mit der Shell in die Quere, weil man sie meistens ja nicht absolut statisch formulieren kann, sondern über Variablen „befüllen“ möchte.

Beispiele hierzu (könnte sein, daß die nicht ganz korrekt formuliert sind):

1. Konfigurationsdatei:

Code: Alles auswählen

Variable1=irgendwas
Variable2=9,1,99,4,9,2,9,2,9
Varialbe3=5,6,8,99,999,9,9,9
Alle Neunen — aber nur in Variable 2 und nicht die Einzel-Ziffern, sondern ganze Zahlen — sollen Siebenen werden:

Code: Alles auswählen

sed -e -e s/Variable2=9,/Variable2=7,/ -e s/\(Variable2=.*\),9\([,$])\/\1,7\2/g DATEINAME
=> klappt nicht. Die 2. Ersetzung findet stets nur die letzte 9.
Erläuterungen:
Gewünschtes Ergebnis:

Code: Alles auswählen

Variable1=irgendwas
Variable2=7,1,99,4,7,2,7,2,7
Varialbe3=5,6,8,99,999,9,9,9
3 Fälle:
  1. =9,
  2. ,9,
  3. ,9<ZEILEN-ENDE>
Dabei müssen wir sicherstellen, da8 nur diejenige Zeile „beackert“ wird, welche mit „Variable2=“ beginnt.
Preisfrage: „Geht das mit sed?“

2. Ersetze was am Ende einer Zeile:

Code: Alles auswählen

SHELLVARIABLLE=Ende_vom_Suchbegriff sed -e s/sonstwas$SHELLVARIABLE$/wasanderes/ DATEINAME
=> klappt auch nicht, aber:

Code: Alles auswählen

SHELLVARIABLLE=Ende_vom_Suchbegriff
BEFEHL="s/sonstwas$SHELLVARIABLE$/wasanderes/"
sed -e "$BEFEHL" DATEINAME
=> geht.
In dem Fall geht auch:

Code: Alles auswählen

SHELLVARIABLLE=Ende_vom_Suchbegriff sed -e s/sonstwas\\$SHELLVARIABLE$/wasanderes/ DATEINAME
Je nachdem, was in $SHELLVARIABLE steht, gibt es dann auch wieder unerwartete Nebenwirkungen.

Edit: Folgender, schon sehr technisch konkreter Austausch von Christoph und tobo abgetrennt nach Fachsimpelei abgetrennt aus „RegExp-Kurs 01: Motivation“
Zuletzt geändert von JTH am 05.04.2022 21:20:11, insgesamt 1-mal geändert.
Grund: Hinweis auf https://debianforum.de/forum/viewtopic.php?t=183952
Christoph

Christoph Franzen
Beiträge: 197
Registriert: 22.08.2005 19:58:49
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Aachen

Re: RegExp-Kurs 01: Motivation

Beitrag von Christoph Franzen » 05.04.2022 14:34:28

Nun mache ich mal eine Zwischenbemerkung; denn wir eilen dem Kurs gerade weit voraus, und ich möchte keinesfalls Anfänger abschrecken.

Das schöne an regulären Ausdrücken ist nämlich, daß man die nicht etwa „ganz oder gar nicht“ lernen muß, sondern sich mit und mit kompliziertere Konstruktionen bei Bedarf aneignen kann. Schon mit ein paar Grundkonstruktionen ist die Suche damit mächtiger als jede einfache, wörtliche Textsuche — auch solche mit Erweiterungen wie Groß-/Kleinschreibung (nicht) unterscheiden und Suche nach „Sonderzeichen“ wie Tabulatoren.

Es ist auch nicht nur was für „Shell-Jünger“; denn sehr viele Programme (auch graphische) für Endanwender haben die (meist als Alternative zusätzlich zur einfachen Suche) eingebaut.

Spontan fallen mir ein:
  • Libreoffice / Openoffice
  • Claws Mail
  • Tvbrowser (Fernseh-/Radio-Programmzeitschrift)
  • Mediathekview (fast „Vollzugriff“ auf die Filme in den Mediatheken deustchsprachiger öffentlich-rechtlicher Sender)
  • Gnucash (Online-Banking, „kleine“ Finanzbuchhaltung)
Es lohnt sich auf jeden Fall, auch wenn Ihr nicht erpicht darauf seid, eine von den „Gartenzaunsprachen“ zu erlernen.

Es lohnt sich vielfach auch, gezielt nachzuforschen, dann findet man reguläre Ausdrücke oft auch dort, wo das nicht direkt offensichtlich im jeweiligen Programm dokumentiert ist:Manchmal werden diese einfach über das normale Suchfeld angesprochen, beispielsweise durch eine vorangestellte spezielle Zeichenfolge (Beispiel Mediathekview: #:).
Christoph

fischig
Beiträge: 4124
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: RegExp-Kurs 01: Motivation

Beitrag von fischig » 05.04.2022 14:40:56

ich möchte keinesfalls Anfänger abschrecken.
Das dürfte schon passiert sein, womöglich schon im Eingangsposting.

Wenn der über Selbstdarstellungen hinaus kommt, wird's 'n Kurs für Fortgeschrittene.

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: RegExp-Kurs 01: Motivation

Beitrag von Meillo » 05.04.2022 15:13:09

fischig hat geschrieben: ↑ zum Beitrag ↑
05.04.2022 14:40:56
ich möchte keinesfalls Anfänger abschrecken.
Das dürfte schon passiert sein, womöglich schon im Eingangsposting.
Welches ``Eingangsposting'' meinst du hier, das von Christoph Franzen oder das von mir? Falls du meines meinst, dann finde ich sehr interessant zu erfahren, was daran deiner Meinung nach Anfaenger abschrecken koennte.
fischig hat geschrieben: ↑ zum Beitrag ↑
05.04.2022 14:40:56
Wenn der über Selbstdarstellungen hinaus kommt, wird's 'n Kurs für Fortgeschrittene.
Wie meinst du das?


Da du vage Kritik bzw. Befuerchtungen geaeussert hast, wuerde mich interessieren, inwiefern diese konkret sind. Zumindest wuerde ich gerne wissen, wenn sie konkret geworden sind, weil ich dann gerne die Moeglichkeit haben wuerde, darauf zu reagieren ... insofern du dich mit deinen Aussagen auf mich bezogen hast (was mir leider nicht ganz klar ist).
Use ed once in a while!

fischig
Beiträge: 4124
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: RegExp-Kurs 01: Motivation

Beitrag von fischig » 05.04.2022 15:23:37

Ich vermag mit deinen Aufgaben nichts anzufangen.
1) Welche Suchprobleme hattest du schon, die du entweder nicht loesen konntest oder fuer die du viel Handarbeit investieren musstest?

Das sind zwei Fragen:
1a) Welche Suchprobleme hattest du schon, die du nicht loesen konntest? Was soll ich darauf antworten? Außer „Diverse“.
1b. für welche Suchprobleme musstest du viel Handarbeit investieren? Erinnere ich nicht.
2) Kennst du Programme, deren Stringsuche (ohne REs) mehr kann als nur stupide nach einem Suchwort zu suchen? Nein
3) An was fuer Anwendungsfaelle denkst du wenn du ``Regulaere Ausdruecke'' hoerst? Keine Ahnung, an gar keine.

Da ich keine Ahnung habe, was wer unter REs versteht, weiß ich mit den Fragen nichts anzufangen. Die dir nachfolgenden Poster schon.

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: RegExp-Kurs 01: Motivation

Beitrag von Meillo » 05.04.2022 15:30:27

Danke, dass du dein Problem dargelegt hast. Nun koennen wir versuchen, dir auch einen Mehrwert zu schaffen.

Wuesstest du Fragen, die fuer dich hier Sinn machen wuerden?

Denkst du, dass es vielleicht gar keine sinnvollen Fragen zu der Einheit gibt?

Kannst du die Antworten der anderen nachvollziehen?

Gibt es eine bestimmte Luecke, die du benennen kannst, wo dir die Verknuepfung fehlt?
Use ed once in a while!

Benutzeravatar
MSfree
Beiträge: 11605
Registriert: 25.09.2007 19:59:30

Re: RegExp-Kurs 01: Motivation

Beitrag von MSfree » 05.04.2022 15:50:09

fischig hat geschrieben: ↑ zum Beitrag ↑
05.04.2022 15:23:37
1) Welche Suchprobleme hattest du schon, die du entweder nicht loesen konntest oder fuer die du viel Handarbeit investieren musstest?
Ein typischer Fall für RegEx ist die Suche nach Zahlen in einem Text. Normale Textsuchen können zwar z.B. nach "123" suchen, aber nicht nach Zahlen ansich. Mit RegEx kann man Ausdrücke formulieren, die nach Zahlen in unterschidlichen Schreibweisen suchen können, also z.B. ganze Zahlen, Zahlen mit Vor- und Nachkommastellen, Zahlen in Exponentialschreibweise, in Hexadezimalnotation...

Viel Handarbeit kann die Erstellung eines RegEx trotzdem sein. Die Standardfälle kann man sich allerdings leicht mit $SUCHMASCHINE besorgen. :wink:

Ein typische Anwendung ist neben der Textsuche die Verifizierung von Eingabemasken in (GUI)-Programmen. Wenn man in eine Maske z.B. ausschließlich ganze Zahlen eingeben darf (z.B. Stückzahlen in einem Lagerhaltungssystem), dann kann man die Eingabe des Benutzers mit einer RegEx untersuchen, bevor die Eingabe an das eigentliche Lagerhaltungssystem übergeben wird. Bei fehlerhafter Eingabe läßt man es den Anweder wissen, so daß der seine Eingabe korrigieren kann. Das schützt letzten Endes die dahinter liegenden Systeme vor allem möglichen, nicht nur vor "unsinnigen" Stückzahlen wie 2,35 Bleistiften, sondern unter anderem sogar vor Pufferüberläufen und Ausführung von Schadcode.

RegEx ist nicht unbedingt etwas für die tägliche Anwedung. Der Syntax ist ziemlich häßlich und Ausdrücke sind nicht für jeden sofort durchschaubar. Es hat schon seine Gründe, warum der original vi (heute vim) bereits RegEx konnte, mit der man in Texten Muster und nicht nur statische Zeichenketten suchen konnte.

Das Syntaxhighlighting in den meisten Texteditoren basiert ebenfalls auf RegEx.

fischig
Beiträge: 4124
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: RegExp-Kurs 01: Motivation

Beitrag von fischig » 05.04.2022 15:55:59

Meillo hat geschrieben:Wuesstest du Fragen, die fuer dich hier Sinn machen wuerden?
Ich benötigte als Anfänger für einen Einstieg eine „rudimentäre“, vorläufige, beispielgestützte Erläuterung dessen, was ich mir unter REs vorstellen soll. Damit hätte ich den Aufgaben evtl. Sinn abgewinnen können.

Meine Motivation für eine Beschäftigung mit REs ist, dass ich mir Shell-Kommandos/Skripte zusammenbasteln kann, die Aufgaben lösen, die gegebene Programme für mich nicht oder nicht zu meiner Zufriedenheit lösen.
Meillo hat geschrieben:Kannst du die Antworten der anderen nachvollziehen?
Nein dazu fehlen mir grundlegende Kenntnisse.

@MSfree
ohne Beispiele kann ich das für mich nicht nachvollziehen: Ich kann's glauben oder eben lassen.

Aber vielleicht solltet ihr euch nicht aufhalten lassen von mir. Ich bin da wohl nur eine Einzelmeinung, auf der man keinen Kurs aufbauen kann. Metadiskussionen machen wenig Sinn. Nehmt meine Anregungen im konkreten Fortgang auf oder lasst es. Ich schalte mich wieder ein, wenn ich das Gefühl habe, dass es mich weiter bringt.

Benutzeravatar
MSfree
Beiträge: 11605
Registriert: 25.09.2007 19:59:30

Re: RegExp-Kurs 01: Motivation

Beitrag von MSfree » 05.04.2022 16:07:20

fischig hat geschrieben: ↑ zum Beitrag ↑
05.04.2022 15:55:59
ohne Beispiele kann ich das für mich nicht nachvollziehen
Wie gesagt, Eingabeverifizierung. Wenn das Warenwirtschaftssystem sagt:

Code: Alles auswählen

Geben sie die Zahl der Bleistifte ein: _______
Der "dumme" Anwender tippt nun A62,x7 und die Entertaste.

Hat der Anwender da nun eine ganze Zahl eingegeben? Mit welcher RegEx sollte das Programm prüfen, ob die Eingabe eine ganze Zahl ist?

fischig
Beiträge: 4124
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: RegExp-Kurs 01: Motivation

Beitrag von fischig » 05.04.2022 16:11:34

Der "dumme" Anwender tippt nun A62,x7 und die Entertaste.

Also ich hätte da schlichte eine ganze Zahl eingegeben, das Nachdenken darüber, wer da jetzt wobei dumm war, hätte ich erst mal dem Fragenden überlassen.

Benutzeravatar
MSfree
Beiträge: 11605
Registriert: 25.09.2007 19:59:30

Re: RegExp-Kurs 01: Motivation

Beitrag von MSfree » 05.04.2022 16:22:23

fischig hat geschrieben: ↑ zum Beitrag ↑
05.04.2022 16:11:34
Also ich hätte da schlichte eine ganze Zahl eingegeben,
Der Hacker, der in des Warenwirtschaftsystem eindringen will, um die Daten dann absaugen zu können, aber nicht. :wink:

Und auch der normale Anwender, der eigentlich nur eine Zahl eingeben wollte, ist mal abgelenkt und trifft daneben. Ob Unfall, Boshaftigkeit oder schlicht Dummheit spielt keine Rolle. Wenn man an der Mensch-Maschine-Schnittstelle bereits Vorkehrungen gegen Fehlbedienung trifft, hat man viel gewonnen.

Also, welche RegEx nimmt man zum Prüfen, ob die Eingabe eine ganze Zahl ist?

Benutzeravatar
frox
Beiträge: 969
Registriert: 06.08.2004 16:29:44
Wohnort: Köln

Re: RegExp-Kurs 01: Motivation

Beitrag von frox » 05.04.2022 16:28:40

fischig hat geschrieben: ↑ zum Beitrag ↑
05.04.2022 16:11:34
Also ich hätte da schlichte eine ganze Zahl eingegeben, das Nachdenken darüber, wer da jetzt wobei dumm war, hätte ich erst mal dem Fragenden überlassen.
Naja, bei einer Inventur von sagen wir mal 12.000 Artikeln passieren schnell mal (auch ganz seltsame) Tippfehler.
Da ist es mitunter schon ganz hilfreich, möglichst viele Fehlermöglichkeiten vorher auszuschließen, ehe da nochmal ein Team zum Korrekturzählen ins Außenlager raus muss.
Anyway, ich verstehe (wie bereits geschrieben) auch gar nichts bis nicht allzu viel vom Thema.
Aber das reine grobe Mitlesen hier hat zumindest schon mal beim Fokussieren geholfen.
Gut, der Dialog von Christoph Franzen und tobo kam für mich dann zwar auch noch ein bisserl zu früh, aber grundsätzlich interessant war das schon.
Ein ganz klein wenig kenne ich halt doch aus der grundsätzlichen (wenn auch eher rudimentären) Shellbenutzung, um zumindest grob rauszulesen, worum es geht..

Will sagen: Lieber fischig, bleib bitte mit dran, sonst bin ich hier das einzige bekennende Fragezeichen. :D
Gruß, Fred

Die Zeit salzt alle Wunden

fischig
Beiträge: 4124
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: RegExp-Kurs 01: Motivation

Beitrag von fischig » 05.04.2022 16:33:36

Der Hacker, der in des Warenwirtschaftsystem eindringen will
Ich dachte, ich sei der Lohnsklave, der eine Eingabe machen soll. :wink:
Also, welche RegEx nimmt man zum Prüfen, ob die Eingabe eine ganze Zahl ist?
Eine Antwort darauf, wäre jetzt in der Tat für mich spannend gewesen. :wink:

Ich habe doch gar nix gegen REs gesagt, im Gegenteil, die interessieren mich sehr. Aber ich weiß so wenig darüber, was das denn eigentlich ist. :wink:

Benutzeravatar
MSfree
Beiträge: 11605
Registriert: 25.09.2007 19:59:30

Re: RegExp-Kurs 01: Motivation

Beitrag von MSfree » 05.04.2022 16:41:03

fischig hat geschrieben: ↑ zum Beitrag ↑
05.04.2022 16:33:36
Ich dachte, ich sei der Lohnsklave, der eine Eingabe machen soll. :wink:
Wie ich oben schon schrub: Für Endanwender, die ein bißchen auf der Shell hacken wollen, sind RegEx eher nicht gedacht. Das System soll aber vor Fehleingaben durch den "Lohnsklaven" geschützt werden.
Eine Antwort darauf, wäre jetzt in der Tat für mich spannend gewesen. :wink:
Schau halt mal bei Stackoverflow vorbei, da wird der Fall von ganz einfach bis ganz kompliziert durchgespielt:
https://stackoverflow.com/questions/904 ... tring-only

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: RegExp-Kurs 01: Motivation

Beitrag von eggy » 05.04.2022 16:42:12

In der Hoffnung, dass wir Meillos Erklärungen nicht zu weit vorgreifen ...

Aufgabe von oben, Eingabe der Inventurwerte.
Um es einfach zu halten, sagen wir mal, dass auch 0 ist ne gültige Eingabe wäre.

Zuerst schreiben wir alle möglichen gültigen Zahlen für unser Prüfprogramm auf: 0, 1, 2, ..., 10, 11, ..., 100, ... 472, ... 9999,....
Hmm, ok, das wird so Nichts, jedenfalls nicht bis morgen früh.
MSfree hat geschrieben: ↑ zum Beitrag ↑
05.04.2022 16:22:23
Also, welche RegEx nimmt man zum Prüfen, ob die Eingabe eine ganze Zahl ist?
Den "nur Zahlen und beliebig viel davon"-RegEx:

Code: Alles auswählen

[0-9]*

[ ] bedeutet (erstmal) irgendwas aus der enthaltenden Menge
0-9 ist hier (weil in [ ] ) ein Bereich: also 0,1,2,3,4,5,6,7,8,9
und * bedeutet, "beliebig oft, auch kein mal".

Eine leere Eingabe wäre also auch gültig.
Will man das nicht, statt * einfach + nehmen, das heißt dann "beliebig oft, aber mindestens einmal"

sorry @Meillo

Benutzeravatar
Phineas
Beiträge: 354
Registriert: 20.06.2012 20:26:19

Re: RegExp-Kurs 01: Motivation

Beitrag von Phineas » 05.04.2022 16:46:39

MSfree hat geschrieben: ↑ zum Beitrag ↑
05.04.2022 16:22:23
Also, welche RegEx nimmt man zum Prüfen, ob die Eingabe eine ganze Zahl ist?
Relativiert auf eine Dezimalzahl und in der Bash:

Code: Alles auswählen

#!/bin/bash

read -e zahl
[[ $zahl =~ ^[0-9]+$ ]] || echo $zahl ist keine Zahl

fischig
Beiträge: 4124
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: RegExp-Kurs 01: Motivation

Beitrag von fischig » 05.04.2022 16:51:20

@eggy

Code: Alles auswählen

[0-9]*
Wo unter diesen Zeichen ist jetzt der/ein reguläre(r) Ausdruck? Ich behaupte mal „[]“ ist ein solcher? oder sind's 2: einmal„[“ und einmal „]“? „*“ ist auch einer? 0 - 9 sind's nicht? Ist „-“ auch einer? Wenn ich das jetzt in einen Editor eingebe und ausdrucke: Was habe ich jetzt geschrieben/gedruckt? Reguläre Ausdrücke oder schlicht Zeichen?

Antworten