RegExp-Kurs 01: Motivation
RegExp-Kurs 01: Motivation
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.)
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!
-
- 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
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:03.04.2022 19:14:44Aufgaben
1) Welche Suchprobleme hattest du schon, die du entweder nicht loesen konntest oder fuer die du viel Handarbeit investieren musstest?
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 (ripgrep) 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: 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?
Ist eine Benutzereingabe eine Zahl, eine E-Mail-Adresse, eine Telefonnummer? Ist der angegebene Variablenname gültig?Meillo hat geschrieben: 3) An was fuer Anwendungsfaelle denkst du wenn du ``Regulaere Ausdruecke'' hoerst?
EDIT: erst0r
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.
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.
Re: RegExp-Kurs 01: Motivation
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
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.
Re: RegExp-Kurs 01: Motivation
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.
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 (backintime)
Teil des Upstream Betreuer Teams von Back In Time (backintime)
Re: RegExp-Kurs 01: Motivation
Vorab:
Mit sowas wie RegExp habe ich mich noch absolut nie bewusst beschäftigt.
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*
Mit sowas wie RegExp habe ich mich noch absolut nie bewusst beschäftigt.
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
Die Zeit salzt alle Wunden
Re: RegExp-Kurs 01: Motivation
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
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
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Re: RegExp-Kurs 01: Motivation
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 r-cran-stringr oder r-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.
Suchen sowie Suchen&Ersetzen.3) An was fuer Anwendungsfaelle denkst du wenn du ``Regulaere Ausdruecke'' hoerst?
- 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
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 am besten.
Ok, ich fantasiere nur, liegt in der Ferne.
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 am besten.
Ok, ich fantasiere nur, liegt in der Ferne.
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt.
-
- Beiträge: 197
- Registriert: 22.08.2005 19:58:49
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: Aachen
Re: RegExp-Kurs 01: Motivation
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:
Alle Neunen — aber nur in Variable 2 und nicht die Einzel-Ziffern, sondern ganze Zahlen — sollen Siebenen werden: => klappt nicht. Die 2. Ersetzung findet stets nur die letzte 9.
Erläuterungen:
Gewünschtes Ergebnis:
3 Fälle:
Preisfrage: „Geht das mit sed?“
2. Ersetze was am Ende einer Zeile: => klappt auch nicht, aber: => geht.
In dem Fall geht auch: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“
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
Code: Alles auswählen
sed -e -e s/Variable2=9,/Variable2=7,/ -e s/\(Variable2=.*\),9\([,$])\/\1,7\2/g DATEINAME
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
- =9,
- ,9,
- ,9<ZEILEN-ENDE>
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
Code: Alles auswählen
SHELLVARIABLLE=Ende_vom_Suchbegriff
BEFEHL="s/sonstwas$SHELLVARIABLE$/wasanderes/"
sed -e "$BEFEHL" DATEINAME
In dem Fall geht auch:
Code: Alles auswählen
SHELLVARIABLLE=Ende_vom_Suchbegriff sed -e s/sonstwas\\$SHELLVARIABLE$/wasanderes/ DATEINAME
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
Grund: Hinweis auf https://debianforum.de/forum/viewtopic.php?t=183952
Christoph
-
- Beiträge: 197
- Registriert: 22.08.2005 19:58:49
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: Aachen
Re: RegExp-Kurs 01: Motivation
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:
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:
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 vielfach auch, gezielt nachzuforschen, dann findet man reguläre Ausdrücke oft auch dort, wo das nicht direkt offensichtlich im jeweiligen Programm dokumentiert ist:
- XFCE-Benutzeroberfläche: Zwischenablage; Programm-Suche; Terminal
- „einfache“ Text-Editoren: https://en.wikipedia.org/wiki/Compariso ... c_features (englisch, 2. Tabellenspalte)
Christoph
Re: RegExp-Kurs 01: Motivation
Das dürfte schon passiert sein, womöglich schon im Eingangsposting.ich möchte keinesfalls Anfänger abschrecken.
Wenn der über Selbstdarstellungen hinaus kommt, wird's 'n Kurs für Fortgeschrittene.
Re: RegExp-Kurs 01: Motivation
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:05.04.2022 14:40:56Das dürfte schon passiert sein, womöglich schon im Eingangsposting.ich möchte keinesfalls Anfänger abschrecken.
Wie meinst du das?fischig hat geschrieben:05.04.2022 14:40:56Wenn der über Selbstdarstellungen hinaus kommt, wird's 'n Kurs für Fortgeschrittene.
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!
Re: RegExp-Kurs 01: Motivation
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.
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.
Re: RegExp-Kurs 01: Motivation
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?
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!
Re: RegExp-Kurs 01: Motivation
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...fischig hat geschrieben:05.04.2022 15:23:371) Welche Suchprobleme hattest du schon, die du entweder nicht loesen konntest oder fuer die du viel Handarbeit investieren musstest?
Viel Handarbeit kann die Erstellung eines RegEx trotzdem sein. Die Standardfälle kann man sich allerdings leicht mit $SUCHMASCHINE besorgen.
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.
Re: RegExp-Kurs 01: Motivation
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.Meillo hat geschrieben:Wuesstest du Fragen, die fuer dich hier Sinn machen wuerden?
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.
Nein dazu fehlen mir grundlegende Kenntnisse.Meillo hat geschrieben:Kannst du die Antworten der anderen nachvollziehen?
@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.
Re: RegExp-Kurs 01: Motivation
Wie gesagt, Eingabeverifizierung. Wenn das Warenwirtschaftssystem sagt:fischig hat geschrieben:05.04.2022 15:55:59ohne Beispiele kann ich das für mich nicht nachvollziehen
Code: Alles auswählen
Geben sie die Zahl der Bleistifte ein: _______
Hat der Anwender da nun eine ganze Zahl eingegeben? Mit welcher RegEx sollte das Programm prüfen, ob die Eingabe eine ganze Zahl ist?
Re: RegExp-Kurs 01: Motivation
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.
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.
Re: RegExp-Kurs 01: Motivation
Der Hacker, der in des Warenwirtschaftsystem eindringen will, um die Daten dann absaugen zu können, aber nicht.
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?
Re: RegExp-Kurs 01: Motivation
Naja, bei einer Inventur von sagen wir mal 12.000 Artikeln passieren schnell mal (auch ganz seltsame) Tippfehler.fischig hat geschrieben:05.04.2022 16:11:34Also 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.
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.
Gruß, Fred
Die Zeit salzt alle Wunden
Die Zeit salzt alle Wunden
Re: RegExp-Kurs 01: Motivation
Ich dachte, ich sei der Lohnsklave, der eine Eingabe machen soll.Der Hacker, der in des Warenwirtschaftsystem eindringen will
Eine Antwort darauf, wäre jetzt in der Tat für mich spannend gewesen.Also, welche RegEx nimmt man zum Prüfen, ob die Eingabe eine ganze Zahl ist?
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.
Re: RegExp-Kurs 01: Motivation
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.fischig hat geschrieben:05.04.2022 16:33:36Ich dachte, ich sei der Lohnsklave, der eine Eingabe machen soll.
Schau halt mal bei Stackoverflow vorbei, da wird der Fall von ganz einfach bis ganz kompliziert durchgespielt:Eine Antwort darauf, wäre jetzt in der Tat für mich spannend gewesen.
https://stackoverflow.com/questions/904 ... tring-only
Re: RegExp-Kurs 01: Motivation
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.
[ ] 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
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.
Den "nur Zahlen und beliebig viel davon"-RegEx:MSfree hat geschrieben:05.04.2022 16:22:23Also, welche RegEx nimmt man zum Prüfen, ob die Eingabe eine ganze Zahl ist?
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
Re: RegExp-Kurs 01: Motivation
Relativiert auf eine Dezimalzahl und in der Bash:MSfree hat geschrieben:05.04.2022 16:22:23Also, welche RegEx nimmt man zum Prüfen, ob die Eingabe eine ganze Zahl ist?
Code: Alles auswählen
#!/bin/bash
read -e zahl
[[ $zahl =~ ^[0-9]+$ ]] || echo $zahl ist keine Zahl
Re: RegExp-Kurs 01: Motivation
@eggy
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?
Code: Alles auswählen
[0-9]*