Das DFDE lernt RegExps

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

Das DFDE lernt RegExps

Beitrag von Meillo » 03.04.2022 18:59:23

Hoi Leute,

jetzt geht's los mit unserem RegExp-Kurs. :-)

In diesem Ueberblicksthread werde ich alle Kursteile verlinken. Jeweils am Wochenende werde ich einen neuen Teil als separaten Thread einstellen. In den Threads kann das auch nachgefragt und diskutiert werden.

Euch alle moechte ich bitten, die Inhalte ins Wiki zu uebernehmen und dort in geeigneter Weise zusammenzutragen.


Inhalt

Einfuehrung
01. Motivation
02. Metazeichen & Escaping

Extended Regular Expressions (EREs)
03. egrep
04. Konkatenation, Alternation, Unterausdruecke
05. Zeichenklassen
06. Punkt, Quantoren
07. Anker, Praezedenz, Zusammenfassung

Verwendung in Programmiersprachen
Python
Go
Pascal
C++/Qt
R


Vorrede

Regulaere Ausdruecke, Regular Expressions, RegExps, RegEx, Regechsen, REs -- das sind alles Synonyme fuer ein maechtiges Ausdrucksmittel bei der Arbeit mit Text. So abschreckend sie durch ihr kryptisches Erscheinen auf viele wirken, so hilfreich und arbeitserleichternd sind sie denjenigen, die sie verstehen und anzuwenden wissen.

Dieser Kurs soll den anderen, die bislang noch keine oder nur wenig Ahnung von REs haben, helfen, sie zu verstehen und zukuenftig selber auch anwenden zu koennen. Dafuer ist ein Lernprozess noetig. REs zu verstehen erfordert ein bestimmtes Denken und Betrachten, das dieser Kurs vermitteln will. Wie alles Neue ist das erstmal ein Aufwand und ein bisschen anstrengend, jedoch gewinnt man damit auch etwas. Eine gewisse Anstrengung ist halt noetig, um einen Erkenntnisgewinn zu erlangen. Damit will ich nicht sagen, dass das Lernen von REs besonders schwierig waere, aber man muss sich darauf einlassen, sich vom Bekannten loesen und offen fuer etwas Neues sein. Es wird sich lohnen.

Mein Ziel ist es, ein Verstaendnis von REs zu vermitteln. Dazu ist eine gewisse Theorie noetig, da die reine Praxis kein Verstehen schafft. Zugleich ist es mir wichtig, diese Theorie aus einem ganz einfachen Nachdenken ueber die Dinge aufzubauen. Von sprachwissenschaftlicher Theorie halte ich mich bestmoeglich fern. (Die wird aber spaeter noch nachgeliefert werden, um einen weiteren Betrachtungswinkel des gleichen Themas zu eroeffnen, und die Funktionsweise von RegExp-Engines aus informatischer Sicht verstaendlich zu machen.)

Da es mehrere Varianten von REs gibt, die sich oberflaechlich etwas unterscheiden, konzentriere ich mich darauf, die generelle Funktionsweise zu erklaeren, die in allen Faellen die gleiche ist. Hat man diese verstanden, so kann man die konkrete Umsetzung in der jeweiligen konkreten RE-Variante schnell anhand einer Manpage oder Webrecherche nachschlagen. Bei konkreten Beispielen orientiere ich mich primaer an EREs (POSIX Extended Regular Expressions), da diese, meiner Meinung nachm die am einfachsten verstaendliche und die konsistenteste Variante sind. Sie werden z.B. in den Programmen `egrep' (bzw. `grep -E') und `awk' verwendet.


Lizenz
Alle meine Inhalt sehe ich als gemeinfrei an, bzw. wenn eine Lizenz gewuenscht wird, dann stehen sie unter CC0. Ihr koennt damit also machen was ihr wollt.
Use ed once in a while!

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

Re: Das DFDE lernt RegExps

Beitrag von eggy » 03.04.2022 19:02:08

https://wiki.debianforum.de/Reguläre_Ausdrücke Literatur, Linkliste, Helferlein, etc

https://wiki.debianforum.de/Reguläre_Au ... scher_Kurs Zusammenfassung des praktischen Kurses

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

Re: Das DFDE lernt RegExps

Beitrag von Meillo » 19.04.2022 16:22:32

Kurz zur Info: Ostern und das Privatleben sind mir in den letzten Tagen etwas in die Quere gekommen :roll: darum ist die naechste Kurseinheit noch nicht veroeffentlicht. Habt noch ein bisschen Geduld. ;-)
Use ed once in a while!

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

Re: Das DFDE lernt RegExps

Beitrag von fischig » 19.04.2022 18:58:08

Ich melde mich bis frühestens Juni ab. Ich habe z.Z. zuviel anderes um die Ohren.

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

Re: Das DFDE lernt RegExps

Beitrag von tegula » 29.05.2022 14:23:07

Meillo hat geschrieben: ↑ zum Beitrag ↑
03.04.2022 18:59:23
Euch alle moechte ich bitten, die Inhalte ins Wiki zu uebernehmen und dort in geeigneter Weise zusammenzutragen.
Wiki-Artikel zum Thema Reguläre_Ausdrücke --> Wiki-Artikel formatiert (Überschriften, Baustellenhinweis, Aufzählungen statt Blöcke für die Linklisten) und die noch fehlende Links auf Teil 4, 5 und 6 nachgetragen.
Wiki-Artikel zum Thema Reguläre_Ausdrücke_-_Lösungen --> Zugehörige Forums-Diskussionen verlinkt (Teil 1 - 4). Kapitel zu 4 -6: Überschriften, Verlinkung auf zugehörige Forums-Diskussionen und Aufgabenstellungen hinzugefügt bzw. von der Wiki-Seite "Reguläre Ausdrücke - praktischer Kurs“ kopiert.

Aus den Forums-Diskussionen die richtigen Lösungen ins Wiki (Wiki-Artikel zum Thema Reguläre_Ausdrücke_-_Lösungen) zusammenzutragen traue ich mir (zumindest momentan) nicht zu :oops:.

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

Re: Das DFDE lernt RegExps

Beitrag von Meillo » 31.05.2022 10:41:57

Zur weiteren Planung:

Das Kapitel EREs/egrep ist nun abgeschlossen.

eggy hat den Theorieteil zwar schon fast fertig, hat aber gerade keine freie Zeit ihn durchzufuehren, darum verschieben wir das noch ein bisschen.

Nach Pfingsten starten wir nun mit einem Kapitel in dem praktisch gezeigt wird wie man REs in diversen Programmiersprachen nutzt. Die Idee ist wiederum, im Wochenrhythmus neue Teile bereitzustellen und zwar je einen Teil zu einer Programmiersprache. Es geht nicht darum, die Programmiersprache zu lernen, sondern wie eine Person, die die Sprache schon kann, in ihr REs nutzen kann. Das muss nicht vollumfaenglich sein, sondern soll nur mal einen Einstieg bieten und ein Gefuehl dafuer vermitteln.

Hier seid ihr nun gefragt! Da es fuer jede Sprache immer wieder das gleiche Schema sein wird, wird der Aufwand recht ueberschaubar sein. Wir brauchen also Freiwillige, die hier Sprachen uebernehmen.

Die ersten zwei Freiwilligen habe ich schon gefunden:

- TRex mit Python
- paedubucher mit Go

Wer von euch kann eine weitere Sprache beitragen?

Antwortet einfach in den Thread. -- Wer zuerst kommt, mahlt zuerst. ;-)
Use ed once in a while!

matthiasklein
Beiträge: 61
Registriert: 25.11.2010 20:56:44

Re: Das DFDE lernt RegExps

Beitrag von matthiasklein » 01.06.2022 08:22:26

Ich kann die Sprachen C++11 (std::regex) und C++/Qt (QRegularExpression) übernehmen.

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

Re: Das DFDE lernt RegExps

Beitrag von Meillo » 01.06.2022 09:11:40

matthiasklein hat geschrieben: ↑ zum Beitrag ↑
01.06.2022 08:22:26
Ich kann die Sprachen C++11 (std::regex) und C++/Qt (QRegularExpression) übernehmen.
Klasse! Vielen Dank. :THX:

Dann bist du als drittes nach TRex und paedubucher dran.



Btw: Falls jemand noch unsicher ist und zoegert, sich oeffentlich festzulegen, dann kann man mich auch per PM anschreiben.
Use ed once in a while!

TuxPeter
Beiträge: 1954
Registriert: 19.11.2008 20:39:02
Lizenz eigener Beiträge: MIT Lizenz

Re: Das DFDE lernt RegExps

Beitrag von TuxPeter » 03.06.2022 11:45:38

Hi,
habe gerade das Beispielprogramm für die Anwendung der bei FreePascal mitgelieferten Unit "RegExpr" um ein paar weitere Beispiele erweitert und zeige das dann auch gerne hier vor.

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

Re: Das DFDE lernt RegExps

Beitrag von Meillo » 03.06.2022 11:51:11

TuxPeter hat geschrieben: ↑ zum Beitrag ↑
03.06.2022 11:45:38
Hi,
habe gerade das Beispielprogramm für die Anwendung der bei FreePascal mitgelieferten Unit "RegExpr" um ein paar weitere Beispiele erweitert und zeige das dann auch gerne hier vor.
Klasse! :THX:

Dann bist du als Vierter dran.
Use ed once in a while!

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

Re: Das DFDE lernt RegExps

Beitrag von Meillo » 20.06.2022 09:58:05

TuxPeter und matthiasklein tauschen ihre Wochen.

Naechste Woche kommt dann also TuxPeter mit FreePascal. Danach matthiasklein mit C++ und Qt.

Dann habe ich noch eine Person in der Hinterhand, die sich noch nicht ganz sicher ist.


Weitere Freiwillige waeren sehr erwuenscht. ;-)

Insbesondere Java, PHP und Javascript waeren toll, weil diese Sprachen sehr verbreitete sind. Koennte sich das jemand vorstellen? (Es muss auch nicht ganz so umfangreich ausgearbeitet sein wie TRex und paedubucher das gemacht haben.)

Wie alle, die einen Teil vorbereitet haben, bestaetigen werden, lernt man dabei selber auch eine Menge, selbst wenn man zuvor der Ansicht war sich schon auszukennen. ;-)
Use ed once in a while!

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

Re: Das DFDE lernt RegExps

Beitrag von tegula » 04.07.2022 11:25:05

Meillo hat geschrieben: ↑ zum Beitrag ↑
20.06.2022 09:58:05
Dann habe ich noch eine Person in der Hinterhand, die sich noch nicht ganz sicher ist.
Ich bin mir jetzt sicher, dass ich einen Kursteil zu regulären Ausdrücken in R machen möchte. Bin aktuell dabei, den Kurs-Part zu erstellen :).

Falls kein anderer Programmiersprachen-Kursteil mehr ansteht, würde ich "meinen" Kursteil nächstes Wochenende posten. Seit ihr damit einverstanden?

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

Re: Das DFDE lernt RegExps

Beitrag von Meillo » 04.07.2022 11:32:54

tegula hat geschrieben: ↑ zum Beitrag ↑
04.07.2022 11:25:05
Ich bin mir jetzt sicher, dass ich einen Kursteil zu regulären Ausdrücken in R machen möchte. Bin aktuell dabei, den Kurs-Part zu erstellen :).

Falls kein anderer Programmiersprachen-Kursteil mehr ansteht, würde ich "meinen" Kursteil nächstes Wochenende posten. Seit ihr damit einverstanden?
Ja, natuerlich. Ich freue mich sehr darauf. :THX:
Use ed once in a while!

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

Re: Das DFDE lernt RegExps

Beitrag von Meillo » 04.07.2022 11:42:26

Zur weiteren Planung:

Nach tegula habe ich keine weiteren Freiwlligen mehr. Ich schlage darum vor, dass wir den RE-Kurs dann erstmal ruhen lassen. Wenn einer Person irgendwann mal noch einfaellt, dass sie doch gerne noch einen Teil zu irgendeiner weiteren Sprache machen will, dann ist das ja jederzeit moeglich.

Im Winter oder so koennten wir dann mal wieder ein neues Kapitel starten, es stehen ja noch ein paar Themen aus (Automatentheorie, PCRE-Features, BREs/sed, Zeitperformance, ...). Oder auch irgend einen anderen Kurs. Ich finde, dass diese Kursidee richtig gut funktioniert hat. Das sollten wir auch in Zukunft immer mal wieder machen.

Fuer den diesjaehrigen Mitmach-Adventskalender gabe es auch schon Ideen, an den einzelnen Tagen was um das Thema REs zu machen. Ihr koennt euch ja schon mal Gedanken machen ... Ende November ist schneller da als man manchmal denkt. ;-)

Nun aber erstmal weiterhin viel Vergnuegen mit C++/Qt und naechste Woche dann mit R.
Use ed once in a while!

VS2FreeUsers
Beiträge: 58
Registriert: 26.06.2023 09:09:40
Lizenz eigener Beiträge: GNU General Public License

Re: Das DFDE lernt RegExps

Beitrag von VS2FreeUsers » 26.06.2023 10:31:43

Hallo,

hier die gängisten Programme in bash:

Code: Alles auswählen

#diese Varinante von grep ist nicht so cpu lastig 
#unterstützt jedoch auch nur die nötigsten Regex Befehle
cat /home/myuser/myfile | grep 'MeinRegex' 

#der erweiterte Regex Satz von grep damit geht so ziemlich alles
cat /home/myuser/myfile | grep -E 'MeinRegex' 

#Suchen und Ersetzen mit sed und regex.
#hier mit dem Flag für Groß und Klienschreibung ignorieren (i)
#und alle Funde ersetzen (g)
#man kann auch mehrmals -e verwenden um mehre Sachen zu und zu ersetzen
cat /home/myuser/myfile | sed -e 's/SuchRegex/ersetze mit/ig'

#mit awk nach Zeilen suchen deren erste Spalte ein Regex matcht (tabs als Spalten sperator .tsv)
cat /home/myuser/myfile | awk -F '\t' '$1 ~ /MeinRegex/ {print $0}'
Zuletzt geändert von VS2FreeUsers am 26.06.2023 11:29:26, insgesamt 1-mal geändert.
vs2-free-users community

#vs2-free-users #VS2FreeUsers

Benutzeravatar
cosinus
Beiträge: 3410
Registriert: 08.02.2016 13:44:11
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Bremen

Re: Das DFDE lernt RegExps

Beitrag von cosinus » 26.06.2023 11:26:01

VS2FreeUsers hat geschrieben: ↑ zum Beitrag ↑
26.06.2023 10:31:43

Code: Alles auswählen

cat /home/myuser/myfile | grep 'MeinRegex' 
Das sieht aber stark nach useless use of cat aus :)
Und IIRC muss man grep dann auch mit -E aufrufen:

Code: Alles auswählen

grep -E 'MeinRegex' /home/myuser/myfile

Das würde auch gehen:

Code: Alles auswählen

</home/myuser/myfile grep -E 'MeinRegex' 

VS2FreeUsers
Beiträge: 58
Registriert: 26.06.2023 09:09:40
Lizenz eigener Beiträge: GNU General Public License

Re: Das DFDE lernt RegExps

Beitrag von VS2FreeUsers » 26.06.2023 11:31:40

cosinus hat geschrieben: ↑ zum Beitrag ↑
26.06.2023 11:26:01
VS2FreeUsers hat geschrieben: ↑ zum Beitrag ↑
26.06.2023 10:31:43

Code: Alles auswählen

cat /home/myuser/myfile | grep 'MeinRegex' 
Das sieht aber stark nach useless use of cat aus :)
Und IIRC muss man grep dann auch mit -E aufrufen:

Code: Alles auswählen

grep -E 'MeinRegex' /home/myuser/myfile

Das würde auch gehen:

Code: Alles auswählen

</home/myuser/myfile grep -E 'MeinRegex' 
Hi,

du hast natürlich Recht,man kann auch die Files direkt angeben. cat hält es halt hier einheitlich und zeigt, das man das Resultat auch pipen kann um es miteinander zu verknüpfen.

Laut man ist es auch ohne -E ein Regex oder?

Code: Alles auswählen

root@srv27595:~# man grep | head
GREP(1)                                                                               User Commands                                                                               GREP(1)

NAME
       grep, egrep, fgrep, rgrep - print lines that match patterns

SYNOPSIS
       grep [OPTION...] PATTERNS [FILE...]
       grep [OPTION...] -e PATTERNS ... [FILE...]
       grep [OPTION...] -f PATTERN_FILE ... [FILE...]

root@srv27595:~#
vs2-free-users community

#vs2-free-users #VS2FreeUsers

Antworten