RegExp-Kurs 02: Metazeichen & Escaping

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

RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von Meillo » 09.04.2022 16:14:12

Kursuebersicht


Teil 02: Metazeichen & Escaping

Diese Einheit ist die konzeptionelle Basis zum Lesen von REs.


Eine herkoemmliche Stringsuche ist genau genommen eine Substringsuche, d.h. wir suchen den Substring (= Suchwort) im Gesamtstring des Textes. Sowohl der Gesamttext als auch das Suchwort koennen dabei jedes beliebige Zeichen enthalten. Das Suchwort besteht zudem aus nichts anderem als einer Reihe von Zeichen, die in der Reihenfolge im Text gesucht werden sollen.

Regulaere Ausdruecke bieten darueber hinaus weitere Moeglichkeiten. Man kann in ihnen Zusatzinformationen hinterlegen, wie dass es entweder das eine oder das andere Wort ist (Samstag/Sonnabend) oder dass es der eine oder der andere Buchstabe ist (Maier/Meier/Mayer/...). Oder dass ein Wort am Zeilenanfang stehen muss oder dass die Buchstaben ein abgeschlossenes Wort bilden muessen.

Die Herausforderung ist nun, dass ein Regulaerer Ausdruck *sowohl* die gesuchten Buchstaben *als auch* diese Zusatzinformationen enthaelt.

Das ist wichtig zu verstehen! Waehrend bei einer Stringsuche das Suchwort nur gesuchte Zeichen enthaelt, enthaelt eine RE sowohl gesuchte Zeichen als auch Zusatzinformationen zur Suche.

Begrifflich nennt man die gesuchten Zeichen ``literale Zeichen''; sie sollen genau so im Text gesucht werden. Die Zusatzinformationen nennt man ``Metazeichen''; sie tragen Informationen bei, die so nicht woertlich im Text zu finden sind.


Falls man bei einer Stringsuche die Gross-/Kleinschreibungsunterscheidung aktivieren und deaktivieren kann, so ist diese Option auch eine Metainformation. Jedoch wird diese nicht *innerhalb* des Suchwortes umgesetzt, sondern als Checkbox oder Schalter ausserhalb des Suchfelds. In diesem Falle ist die Trennung zwischen literalen Zeichen und Metainformation einfach: sie ist strukturell im User Interface gegeben.

Bei REs dagegen sind beide Informationen in einem einzigen Ausdruck (also einem Wort, einer Zeichenfolge) vermischt. Einerseits macht es das bequem, da man nur einen einzigen RE-String eingeben muss, der schon alles enthaelt, und nicht in jedem Programm weitere User-Interface-Elemente zur Angabe der weiteren Optionen braucht, andererseits macht gerade diese Vermischung REs so schwer verstaendlich.

Unsere Hauptaufgabe beim Lesen von REs wird folglich sein, im Ausdruck Literale und Metazeichen zu unterscheiden.


Wie kann man zwei Arten von Zeichen in einem Ausdruck unterscheiden?

Im einfachsten geht das wenn die zwei Arten von Zeichen disjunkt sind, d.h. ohne Ueberschneidung. In dieser Weise nutzen Mathematiker und Physiker gerne griechische Buchstaben fuer ihre Variablen. Es ist dann sofort klar, ob etwas eine Variable oder normaler Text ist.

Eine andere Art der Unterscheidung kann durch das Formatieren der Zeichen erreicht werden. Wenn man Fett- und Kursivschrift oder Farben zur Verfuegung hat, kann man damit die sonst gleichen Zeichen unterscheidbar machen.

Bei Regulaeren Ausdruecken haben wir leider keine dieser beiden Moeglichkeiten zur Verfuegung. Zum einen koennen alle Zeichen im Text und damit literal im Regulaeren Ausdruck vorkommen, so dass wir keine weitere Zeichenmenge fuer die Metazeichen uebrig haben, zum anderen sind die REs selbst reiner Text und koennen demnach nicht typographisch formatiert werden. Wir brauchen folglich einen anderen Mechanismus, um die beiden Zeichenarten zu trennen.

Der in solchen Faellen genutzte Mechanismus heisst Escapen.


Escapen funktioniert folgendermassen:

1) Wir waehlen ein Escapezeichen. (Man nimmt moeglichst ein Zeichen, das selten im Text vorkommt, aber prinzipiell ist jedes Zeichen moeglich.)

2) Entweder die Literale oder die Metazeichen sind die Standardzeichen. Die andere Zeichenart muss escapet werden. D.h. vor jedes Zeichen der anderen Zeichenart muss ein Escapezeichen kommen.

3) Um das Escapezeichen literal zu erhalten muss es (mit sich selbst) escapet werden. (Zwei aufeinander folgende Escapezeichen stehen immer fuer ein literales Escapezeichen.)


Nun haben wir einen Mechanismus mit dem wir jedes Zeichen in zwei Arten interpretieren koennen: In der ersten Art wenn es nach einem Escapezeichen kommt und in der zweiten Art wenn es nicht nach deinem Escapezeichen kommt.

Wir koennen das Escapezeichen dabei verstehen als einen Hinweis: Achtung, das naechste Zeichen gehoert zur anderen Zeichenart. (Wikipedia: ``an escape character is a character that invokes an alternative interpretation on the following character''.)


Die Unterscheidung und identifizierung von Literalen und Metazeichen in einem Regulaeren Ausdruck ist von zentraler Bedeutung. Sie ist die Basis des Verstaendnisses von REs. Dazu muss das Konzept des Escapens gut verstanden sein.

Hier folgen nun verschiedene Uebungen, um mit diesem Konzept warm zu werden. Am besten, ihr arbeitet mit Bleistift, Papier und Farben. Bei den letzten Aufgaben koennt ihr dann auch selber programmieren (wenn ihr das koennt) und eure vorigen Loesungen damit nochmal abgleichen.


Aufgaben:

1) Das Escapezeichen ist der Unterstrich (_). Literale Zeichen sind die Standardzeichen. Schreibe den Ausdruck fuer das literale Wort: ``Haus''.

2) Das Escapezeichen ist der Unterstrich (_). Metazeichen sind die Standardzeichen. Schreibe den Ausdruck fuer das literale Wort: ``Haus''.

3) Das Escapezeichen ist das grosse X. Metazeichen sind die Standardzeichen. Schreibe den Ausdruck fuer das literale Wort: ``Haus''.

4) Das Escapezeichen ist das kleine a. Literale Zeichen sind die Standardzeichen. Schreibe den Ausdruck fuer das literale Wort: ``Haus''.

5) Suche dir ein Escapezeichen aus. Literale Zeichen sind die Standardzeichen. Schreibe die Zeichenfolge: Literales `D', literales 'F', literales `D', literales 'E', Metazeichen `J', literales `R', literales `E', literales `s', literales `!', Metazeichen `J', Metazeichen `@'.

6) Schreibe den gleichen Text aus (5) aber mit Metazeichen als Standardzeichen.

7) Das Escapezeichen ist die oeffnende runde Klammer (`('). Suche dir aus, welche Zeichenart die Standardzeichen sind. Schreibe einen Ausdruck mit nur oeffnenden und schliessenden runden Klammern und erklaere ihn anschliessend.

8) Das Escapezeichen ist das Komma (,). Literale Zeichen sind die Standardzeichen. Beschreibe den Ausdruck (vgl. (5)): ``A,BCD,E,FG,,H''

9) Das Escapezeichen ist das Komma (,). Metazeichen sind die Standardzeichen. Beschreibe den Ausdruck: ``hello, world''

10) Das Escapezeichen ist das kleine a. Literale Zeichen sind die Standardzeichen. Beschreibe den Ausdruck: ``Haus''

11) Das Escapezeichen ist das kleine a. Literale Zeichen sind die Standardzeichen. Beschreibe den Ausdruck: ``Haaus''

12) Das Escapezeichen ist das kleine a. Metazeichen sind die Standardzeichen. Beschreibe den Ausdruck: ``Haaus''

13) Schreibe ein Programm, das literalen Text passend escapet. Das Escapezeichen und die Entscheidung, welche Zeichenart die Standardzeichen sind, sollen variabel sein (z.B. CLI-Argumente). Pruefe damit deine Loesungen fuer die Aufgaben (1) bis (7).

14) Auf die vorigen Aufgabe aufbauend: Schreibe ein Programm, das den escapeten Text wieder einliest und eine sprachliche Beschreibung davon ausgibt, aehnlich wie in (5). Pruefe damit deine Loesungen fuer die Aufgaben (8) bis (12).


(Naechste Woche ueben wir dann mit egrep in der Praxis.)
Use ed once in a while!

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von Meillo » 09.04.2022 20:37:25

Ach ja, bitte postet dieses Mal nicht gleich eure Loesungen, weil andere ja sicherlich noch etwas laenger raetseln werden oder erst spaeter anfangen.

Wie denkt ihr darueber? Sollen wir einen bestimmten Tag festlegen ab dem Loesungen abgegeben werden duerfen oder ist das nicht so wichtig?
Use ed once in a while!

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von frox » 09.04.2022 21:12:57

Einen Stichtag festzulegen fände ich durchaus sinnvoll.
Mein Vorschlag wäre der jeweilige Donnerstag.
Beidseitig ausreichend Abstand zu Wochenanfang und Lösungssonntag. :)
Gruß, Fred

Die Zeit salzt alle Wunden

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von Meillo » 10.04.2022 10:34:35

Mich hat eine PM erreicht, von einem Anfaenger, der sich von diesem zweiten Teil abgehaengt fuehlt. Statt der von ihm erwarteten Praxis kamen hier von mir naemlich abstrakte Inhalte. ... damit hat er recht. Ich muss zugeben, dass das ein mir eigentlich bekanntes Problem bei mir ist: Ich arbeite stark bottom-up und stark konzeptorientiert. Fuer diejenigen, die anders an Themen herangehen, passt das hier nun nicht so recht. Das ist eine berechtigte Kritik.

Nun frage ich mich, wie ich darauf reagieren soll. Ich verstehe das Problem, aber ich sehe momentan nicht so richtig eine Loesung dafuer.

Eine Moeglichkeit waere (gewesen), die konzeptionellen Grundlagen alle in einen Teil zu stopfen, damit es rein zeitlich schneller zur Praxis kommt.

Eine Moeglichkeit waere (gewesen), staerker aus der Praxis heraus zu beginnen. (Zugegeben, ich bin selber ueberrascht wie viel Theorie ich nun doch gemacht habe. Das hatte ich davor so nicht erwartet.)

Eine Moeglichkeit waere, dass die staerker praxisorientiert Arbeitenden von euch die derzeitigen Inhalte mal so hinnehmen und spaeter anhand der Praxisteile nachtraeglich wieder aufgreifen.

...



Damit ihr verstehen koennt, warum ich so vorgehe, wie ich das tue, hier ein paar Erklaerungen:

Es gibt nicht nur eine Art von REs, sondern 5-10. Auch wenn sie sich aehneln, so liegen doch viele Unterschiede in den Details. Ohne ein konzeptionelles Grundverstaendnis, auf das man die unterschiedlichen Ausformungen projezieren kann, wird man in der Praxis immer wieder verwirrt sein. Man kann sich in der Praxis auch nicht einfach auf eine Art von REs beschraenken (ausser man programmiert nur eine Programmiersprache), da die Unix-Tools (grep, sed, awk, ...) schon unterschiedliche Arten verwenden und die Programmiersprachen nochmal andere. Nur wenn man das Konzept hinter Metazeichen und Escaping verstanden hat, kann man die Unterschiede zwischen den verschiedenen RE-Auspraegungen abstrahieren und sein Wissen darueber selbststaendig erweitern.

Ich weiss, dass sich viele Menschen schwer damit tun, stupide mechanisch zu denken. Der Mensch versucht sofort Bekanntes zu sehen und allerlei darueber anzunehmen. So nuetzlich das in vielen Faellen ist, so hinterlich ist es oft beim Programmieren. Bei kryptischen Sprachen wie sed-Ausdruecken, komplexe Shell-Ausdruecken, REs und dergleichen kommt man mit einem intuitiven Ansatz schnell an die Grenze. Man muss dort verlernen, Dinge anzunehmen und zu meinen was etwas sein koennte, sondern muss ganz stupide mechanisch die Zeichen abarbeiten. Diese Art zu sehen und zu denken muss man erst lernen. Das ist eine grosse Huerde. Wenn ich nun mit Praxisbeispielen beginne, dann bleibt ihr in eurer intuitiven Herangehensweise, bei der ihr eure intuitiven Erwartungen in die Ausdruecke projeziert und mehr aus dem Bauch heraus ratet was etwas sein koennte, statt den Ausdruck zu verstehen. Das klappt gut fuer einfache Ausdruecke, bei denen man oft richtig raet, scheitert aber wenn irgendwas unbekanntes auftaucht. Mein Ansatz lehrt euch eine Herangehensweise mit der ihr Ausdruecke beliebiger Komplexitaet zerlegen und verstehen koennt. Dazu muesst ihr aber gewissermassen erstmal eure intuitive, vorausahnende Betrachtungsweise verlernen um eine neue stupide mechanische Betrachtungsweise zu lernen. Die innere Abneigung dagegen steht einem wohl manchmal im Weg.

Aber natuerlich setze ich hierbei halt voraus, dass ihr die Zeit und Energie habt, euch auf so ein Unterfangen einzulassen. Und ich setze voraus, dass ihr REs richtig verstehen lernen wollt und nicht nur die fuenf haeufigsten Ausdruecke auswendig lernt, um ab und zu grep zu verwenden.



Hmm ... fuer mich fuehlt es sich schon auch etwas bloed an, dass ich manche von euch nochmal eine Woche hinhalten muss, bevor es endlich einen konkreten `egrep'-Aufruf auf eine Textdatei gibt, mit dem man interaktiv rumspielen kann, anstatt sich das Gehirn mit abstraktem Denken zu martern.

Vielleicht kann ich aber den hier sich nun abgehaengt Fuehlenden helfen, die Inhalte des aktuellen Teils dennoch zu verstehen. Ich kann sehr gerne jeden einzelnen Aspekt nochmal ausfuehrlicher und mit Beispielen erklaeren. Bitte fragt nach!



Auch sonst bin ich an Kommentaren jeder Art interessiert. Wie seht ihr das alles? Schreibt eure Meinungen.



(Naechste Woche verwenden wir `egrep' auf der Kommandozeile, versprochen! ;-) )
Use ed once in a while!

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von fischig » 10.04.2022 10:59:52

Unsere Hauptaufgabe beim Lesen von REs wird folglich sein, im Ausdruck Literale und Metazeichen zu unterscheiden.
[...]
Escapen funktioniert folgendermassen:

1) Wir waehlen ein Escapezeichen. (Man nimmt moeglichst ein Zeichen, das selten im Text vorkommt, aber prinzipiell ist jedes Zeichen moeglich.)

2) Entweder die Literale oder die Metazeichen sind die Standardzeichen. Die andere Zeichenart muss escapet werden. D.h. vor jedes Zeichen der anderen Zeichenart muss ein Escapezeichen kommen.
Ein Beispiel/Beispiele hierzu wären für mich hilfreich gewesen.
Ich arbeite stark bottom-up
Ist das das, was man anderswo als induktiv bezeichnet?

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von TuxPeter » 10.04.2022 11:16:49

Hi,
ich finde die Aufgaben eigentlich recht praxisorientiert. Und sicherlich ist die Empfehlung, mal mit Buntstift und Papier zu arbeiten, durchaus beherzigeneswert - ich jedenfalls kann sie nicht en-passent lösen, obwohl ich als EDV-Oldi schon vor ewig und drei Tagen sog. Escape-Sequenzen in Texte hineinbastelte, um die damals aktuellen Epson-Nadler zum Schriftwechsel zu überreden oder um beim Programmieren ein Anführungszeichen zu drucken.

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von thoerb » 10.04.2022 11:23:33

fischig hat geschrieben: ↑ zum Beitrag ↑
10.04.2022 10:59:52
Ein Beispiel/Beispiele hierzu wären für mich hilfreich gewesen.
Ja das denke ich auch. Ich fand es bisher alles sehr gut erklärt, aber ich habe auch schon einiges mit RegExp gemacht und eine genaue Vorstellung von dem was du @meillo beschreibst. Aber wenn ich das nicht hätte, würde ich an diese Stelle vielleicht schon aussteigen:
Meillo hat geschrieben: ↑ zum Beitrag ↑
09.04.2022 16:14:12
Begrifflich nennt man die gesuchten Zeichen ``literale Zeichen''; sie sollen genau so im Text gesucht werden. Die Zusatzinformationen nennt man ``Metazeichen''; sie tragen Informationen bei, die so nicht woertlich im Text zu finden sind.
Da würde mir dann wahrscheinlich einfach die Fantasie fehlen, wie ich mir ein Metazeichen vorstellen muss, an welcher Stelle die zu finden sind und später dann, warum die escaped werden müssen.

Ein paar simple Beispiele würden an der Stelle sicher helfen das besser zu verstehen.

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von TRex » 10.04.2022 11:40:52

Ich finde dafür auch den Begriff Steuerzeichen passend, wenn schon von uralten Druckern gesprochen wird: die Maschine (die ja früher zumindest streng mechanisch vorgeht) liest ein Zeichen (zum Drucken) aus der Eingabe, prüft, ob es sich um ein Steuerzeichen handelt, und druckt es dann direkt oder ändert Einstellungen (wie Fettschrift). Das Steuerzeichen selbst wird aber nicht gedruckt. Das erklärt hoffentlich, was Metazeichen/Steuerzeichen von dem "regulären" Zeichensatz unterscheidet.

Bei regulären Ausdrücken ist ein + ein solches Metazeichen.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von tegula » 10.04.2022 11:42:31

Meillo hat geschrieben: ↑ zum Beitrag ↑
09.04.2022 20:37:25
Ach ja, bitte postet dieses Mal nicht gleich eure Loesungen, weil andere ja sicherlich noch etwas laenger raetseln werden oder erst spaeter anfangen.

Wie denkt ihr darueber? Sollen wir einen bestimmten Tag festlegen ab dem Loesungen abgegeben werden duerfen oder ist das nicht so wichtig?
Ist mir eigentlich nicht so wichtig, aber im Zweifel finde ich eine klare Regelung (z. B. bestimmter Wochentag), besser als ein unbestimmtes "Bitte nicht zu früh posten".

Meillo hat geschrieben: Auch sonst bin ich an Kommentaren jeder Art interessiert. Wie seht ihr das alles? Schreibt eure Meinungen.
Teile die Auffassung des PM-Schreibers eher nicht. Die Aufgaben 13 und 14 finde auf den ersten Blick (hab noch nicht mit der Bearbeitung angefangen) gut, weil sie die Möglichkeit bieten, schon jetzt etwas im eigenen Anwendungskontext auszuprobieren. Fände gut, wenn es ähnliche Aufgaben (ergänzend zum gemeinsamen Praxisteil mit egrep) auch in den zukünftigen Kursabschnitt geben würde. :)

PS: Großes Danke an Meillo und die anderen Beteiligten, dass ihr diesen Kurs für uns macht! :THX:

Huo
Beiträge: 614
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von Huo » 10.04.2022 11:56:59

Als "Hobby-Coder" ohne professionellen IT-Hintergrund habe ich schon öfters Reguläre Ausdrücke genutzt, mich dabei aber immer mehr oder weniger durchgewurschtelt bzw. im Netz nach passenden Lösungen recherchiert. Dabei ist mit der Zeit dann einiges an Halbwissen hängen geblieben.

Gerade das Escapen habe ich immer als größte Herausforderung empfunden und war im ersten Moment erstaunt, dass hier im Kurs das (vermeintlich?) Schwierigste gleich am Anfang steht. Nach Lesen der Lektion und Bearbeitung der Aufgaben leuchtet mir aber die grundlegende Bedeutung des Escapens ein und ich bemerke für mich einen echten Zugewinn an theoretischem Grundverständnis, das mir bisher gefehlt hat. Mein spontanes Durchwurschteln wurde so quasi ein Stück weit auf eine solide Grundlage gestellt.

Als Laie, der schon einige praktische Erfahrungen mitbringt, sagt mir der abstrakte Zugang also zu. Ich kann aber verstehen, dass er für echte Anfänger vielleicht weniger geeignet ist.

Noch zwei inhaltliche Fragen zur Lektion:
Meillo hat geschrieben: ↑ zum Beitrag ↑
09.04.2022 16:14:12
Um das Escapezeichen literal zu erhalten muss es (mit sich selbst) escapet werden. (Zwei aufeinander folgende Escapezeichen stehen immer fuer ein literales Escapezeichen.)
Folgt daraus, dass dem Escapezeichen nie eine Meta-Funktion zukommen kann (neben seiner Escape-Funktion, die ja vielleicht auch als "meta" bezeichnet werden darf)?
Meillo hat geschrieben: ↑ zum Beitrag ↑
09.04.2022 16:14:12
Entweder die Literale oder die Metazeichen sind die Standardzeichen. Die andere Zeichenart muss escapet werden.
Wären nicht "gemischte Sprachen" praktisch, die die Gundmenge aller Zeichen in zwei disjunkte Mengen M1 und M2 aufteilen: M1 umfasst die (prioritären) Literale, M2 die (prioritären) Metazeichen? Das Escapezeichen würde dann literalen Zeichen aus M1 eine Metafunktion zuweisen, Metazeichen aus M2 eine literale Bedeutung.
Zuletzt geändert von Huo am 10.04.2022 12:11:14, insgesamt 1-mal geändert.

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von Meillo » 10.04.2022 12:04:01

Hier ein konkreteres Beispiel zum Escapen und zum Verstaendnis von Literalen und Metazeichen.

Nehmen wir an, wir moechten einen Text mit Farben formatieren. Der Text und die Farbinformation sollen in einer Zeichenfolge gespeichert werden. Wir entscheiden uns fuer das Escapezeichen At (@) und dass literale Zeichen die Standardzeichen sind. Mit Metazeichen koennen wir Farbinformationen hinterlegen. Das Metazeichen B aendert die Schriftfarbe auf blau, das Metazeichen G aendert sie auf gruen, S auf schwarz, usw.

Die Information, dass literale Zeichen die Standardzeichen sind, heisst, dass, solange das Escapezeichen (@) nicht vorkommt, alle Zeichen fuer sich selbst stehen. Damit bedeutet dieser Ausdruck:

Code: Alles auswählen

alle meine Entchen
diesem Text entspricht:
alle meine Entchen
Alle Zeichen darin stehen fuer sich selbst. Es gibt keine Escapezeichen und damit keine Farbinformation.

Nun ein Beispiel mit Escapezeichen. Beispielsweise dieser Ausdruck:

Code: Alles auswählen

alle meine @Bblauen@S Entchen
Er entspricht diesem Text:
alle meine blauen Entchen
Der Ausdruck enthaelt genau zwei Metazeichen: @B und @S. Ganz genau genommen ist der Ausdruck folgendermassen aufgebaut:
- literale Zeichen fuer ``alle meine ''
- Escapezeichen, damit das folgende B als Metazeichen interpraetiert wird
- literale Zeichen fuer ``blauen''
- Escapezeichen, damit das folgende S als Metazeichen interpraetiert wird
- literale Zeichen fuer `` Entchen''

Die Metazeichen und Escapezeichen sind nur Zusatzinformationen, die nicht als Zeichen im Text vorkommen. Nur die literalen Zeichen finden sich im Text wieder.


Hier nochmal ein Beispiel, es ist fast gleich wie das vorige wir fuegen nur weitere Metainformation ein (die jedoch keine Auswirkung hat). Folgender Ausdruck:

Code: Alles auswählen

@Salle meine @R@G@Bblauen@S Ent@W@Schen@L
Er entspricht dem genau gleichen Text:
alle meine blauen Entchen
die weiteren Farbwechsel haben keine Auswirkungen, da sie sich auf keine literalen Zeichen auswirken.


Nun mal ein Ausdruck fuer einen Text der ein Escapezeichen selbst enthaelt:

Code: Alles auswählen

@Gmeillo@S@@@Bmarmaro@S.@Rde@S
Dieser Ausdruck formatiert die Bestandteile einer Emailadresse in unterschiedlichen Farben. Aussehen wuerde das dann so:
meillo@marmaro.de
Das Escapezeichen muss mit sich selbst escapet werden, damit es literal interpraetiert wird.


Ich hebe nun mal alle Escapezeichen blau hervor, damit ihr seht welches Escapezeichen sind:
@Gmeillo@S@@@Bmarmaro@S.@Rde@S
(Ein einziges @-Zeichen ist kein Escapezeichen. Das ist dasjenige, das dann im Text auftaucht.)

Nun hebe ich alle Metazeichen blau hervor:
@Gmeillo@S@@@Bmarmaro@S.@Rde@S
Dies sind die Steueranweisungen fuer den Farbwechsel. Obwohl es auch Buchstaben sind, tauchen sie nicht im Text auf. Sie sind durch die Escapezeichen als Metainformation markiert.

Das Metazeichen @ ist ein Sonderfall. Dadurch, dass es escapet ist, ist das @ hier ein Metazeichen, aber dasjenige Metazeichen, das gleich dem Escapezeichen ist, steht immer fuer sich selbst literal. Das ist ein Sonderfall, der noetig ist, damit es ueberhaupt moeglich ist, das Escapezeichen literal zu verwenden. (Btw: Damit ist die Menge der literalen Zeichen genau eins groesser als die Menge der Metazeichen. Denn jedes Zeichen kann es als Literal und als Metazeichen geben, bloss das Escapezeichen kann es nur literal geben.)


Nun hebe ich noch die literalen Zeichen blau hervor:
@Gmeillo@S@@@Bmarmaro@S.@Rde@S
Das sind all die Zeichen, die ihr im Text wiederfindet. Im Ausdruck sind es all die Zeichen deren kein Escapezeichen vorangeht. (Ausnahme ist der Sonderfall @@.)


Ist es damit verstaendlicher geworden? Fragt gerne weiter nach. Ich habe nichts dagegen, die Inhalte interaktiv zu entwickeln.
Use ed once in a while!

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von eggy » 10.04.2022 12:07:12

:THX:

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von fischig » 10.04.2022 12:15:17

Ist es damit verstaendlicher geworden?
Beträchtlich!
alle meine @Bblauen@S Entchen
Woher weiß „der Drucker/Bildschirm, etc.“ dass „alle meine“ scharz gedruckt werden soill?

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von Meillo » 10.04.2022 12:26:06

fischig hat geschrieben: ↑ zum Beitrag ↑
10.04.2022 12:15:17
alle meine @Bblauen@S Entchen
Woher weiß „der Drucker/Bildschirm, etc.“ dass „alle meine“ scharz gedruckt werden soill?
;-) ... eine berechtigte Frage. Ich sehe, du passt auf. Gut so. :THX:

Schwarz ist seine Standardfarbe. :mrgreen:
Use ed once in a while!

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von TuxPeter » 10.04.2022 12:41:45

Entweder die Literale oder die Metazeichen sind die Standardzeichen.
Hier musste ich etwas schlucken. Aber dann fiel mir das Konzept der Wörtlichen Rede bzw. der Zitierzeichen ein - das passt ja hier. Das Spiel mit den Metaebenen. Wenn jemand mit blauem Stift schreibt: "Dies ist rot." Wenn ein Künstler ein Bild von einer Pfeife malt und drunter schreibt: "Dies ist keine Pfeife." Wenn wir einem Computer sagen, er soll sagen. "Hello World". (lies sagen als schreiben) Wenn der Computer dem Menschen sagen soll, dass der etwas sagen soll. Etwa so: Print "Sage bitte ""Hello World"""

Es besteht ja auch eine gewisse Ähnlichkeit zu den sog. "Tags", also [/start irgendwas] Bla bla bla [/ende irgendwas] (oder so ähnlich)
Und man kann sich dann fragen, ob in einem Programm nicht sowieso alles, außer den Literalen halt, aus Metazeichen besteht.

Jedenfalls, es macht Spaß hier, Danke dafür!

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von Christoph Franzen » 10.04.2022 18:47:53

Da sieht man schön, daß Mathematik und Sprachwissenschaft keine Gegensätze sind. Sprachbegabte Leute sind gute Mustererkenner und die mathematisch begabten können gut stur nach Regelwerk denken.

In den natürlichen Sprachen wird das Konzept exzessiv genutzt, da erstaunt es auch niemanden, daß die Bedeutung einzelner Zeichen vom „Drumherum“ abhängt. (Meint „Bank“ jetzt den länglichen Stuhl für mehrere Leute oder das Haus, in dem mein Geld aufbewahrt wird oder die Leute, denen jenes Haus gehört?) Das „Escapezeichen“ kann hier irgendwo davor oder dahinter stehen und ist nichtmal genau definiert. Dafür gibt es „Redundanz“ ohne Ende, also „überflüssige“ Informationen, die jedoch sicherstellen, daß das Gesagte auch noch verständlich bleibt, wenn es fehlerhaft ist, sowas wie die Übereinkunft, den Satzanfang großzuschreiben, obwohl hinter dem letzten Satz ja schon ein Abschluß-Punkt hätte stehen sollen. Das erleichtert aber die Mustererkennung ungemein.

Die regulären Ausdrücke treiben das auf die Spitze, es gibt also genau ein Zeichen, das Sonderbedeutungen einleitet oder aufhebt und Reihenfolgen sind klar definiert, ebenso die meist genau eine Zusatz-Bedeutung von Sonderzeichen. Das macht es mühsam, diese intuitiv zu lesen, weil jedes Zeichen relevant ist und nicht ein einziges überflüssig, aber dafür ist das hervorragend automatisierbar und erlaubt „kurze“ Überprüfungen. Der Anwender will im Eingabeformular für die E-Mail-Adresse „sofort“ sehen, ob eine formal gültige eingegeben worden ist.

Was nun die Mengen angeht, so könnte man das auch anders sehen: nämlich, daß die Menge der Metazeichen und die der wörtlichen Zeichen genau gleich groß seien; das „Escape“-Zeichen ist ja nur insofern etwas besonderes, als daß es die Sonderbedeutung als „normale“ hat, es kann seine eigene Sonderbedeutung aufheben und solange es nur genau ein solches Zeichen gibt, das immer nur die Bedeutung eines Objektes (unmittelbar dahinter) ändert, ist auch klar, daß es keine weitere Sonderbedeutung haben kann (ebensowenig wie die anderen Sonderzeichen, von denen es sich von daher nicht mehr grundlegend unterscheidet; es bedürfte unnötig komplizierter Regeln, wollte man das unbedingt anders machen).

In der Praxis ist es nun so, daß es weitaus WENIGER Sonderzeichen als gewöhnliche gibt — nur theoretisch sind es immer noch gleich viele, weil bei den „nicht besonderen“ nur „zufällig“ die Sonderbedeutung gleich der wörtlichen ist. Das sollte man im Kopf behalten, wenn man reguläre Ausdrücke nach der Lektüre dieses Kurses jetzt „schwierig“ findet.

So gibt es zwar ein paar „Dialekte“, aber in den grundlegenden Sonderzeichen unterscheiden die sich nicht, so bedeutet * stets: beliebig oft (auch Null Mal) das, was unmittelbar davor steht. Unterscheiden tun die sich vorwiegend in den „höheren Funktionen“, die teilweise schon über „mathematisch reine“ reguläre Audrücke hinausgehen, oder aber in „Abkürzungsschreibweisen“ wie \p{sprechender Name} für eine Zeichenklasse, die ansonsten immer wörtlich aufgezählt werden müßte. ‚Alle Satzzeichen“ sind schon mühsam aufzuzählen, wenn das auf alle Sprachen passen soll, die Spanier wollen schließlich das „¡“ und das „¿“ dabeihaben…
Christoph

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von ralli » 13.04.2022 08:09:22

Also einfache reguläre Ausdrücke habe schon immer benutzt, wenn ich mit Delphi oder Lazarus programmierte. Sie sind ja heute in der IT Welt nicht mehr wegzudenken. Was wäre Google ohne reguläre Ausdrücke? Oder die Validierung für gültige Eingaben in Formularen (Mailadresse). Die Anwendungsmöglichkeiten sind schier unendlich.

Jetzt ein paar persönliche Einschätzungen, um alles etwas besser einzuordnen oder zu verstehen. Sind reguläre Ausdrücke streng genommen auch eine Art von Mengenlehre? Was ein Literal ist, ist ja nicht schwer zu verstehen. Aber Metazeichen, kann man das auch als Methode wie eine Art Bauplan verstehen, also die Architektur für das Suchmuster? Oder liege ich damit völlig falsch?

Danke Meillo für Deinen Einsatz und Deine Zeit und Kompetenz, die Du uns schnkst, ich versuche mitzuhalten ....

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

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von buhtz » 13.04.2022 20:10:09

Es ist wirklich herrlich euch alle, mit den verschiedenen Niveaus, Expertisen, Erfahrungen und Fachgebieten, diskutieren zu hören. Alleine dabei lerne ich schon sooo viel. :hail: :THX:

Zum Anfangsposting, der Erklärung und den Aufgaben: Ja, das ist sehr detailliert und sehr tief. Und genau deswegen fand ich es super gut, weil es dazu führt, dass nahezu jeder darin einen Anknüpfungspunkt finden kann; jede Niveaustufe und Erfahrungsstufe. Vieles kannte ich schon und konnte beim Lesen vorrausahnen, worauf du hinaus wolltest. Alleine das gab mir schon ein Belohnungsgefühl.

Die erwähnte PM kann ich nachvollziehen, aber eben nicht nachempfinden; jedenfalls nicht bei diesem Thema. Ich bin kein Pädagoge und weiß nicht, ob es dafür eine Lösung gibt. Aber bei manchen Themen muss man sich am Anfang durch wurschteln und einfach akzeptieren, dass man die ersten Kapitel oder Vorlesungen einfach erstmal gar nix kapiert.

Deinen Ansatz finde ich wirklich gut und scheinbar ist der auch gut durchdacht. Dieser Ansatz ist es ja auch, der deinen Kurs von den sonstigen Blog-Postings und Tutorials absetzen soll. Wir sind hier ja nicht im Ubuntu-Wiki und tippen blind Befehle in die root-shell, sondern wollen verstehen, was passiert.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von tegula » 14.04.2022 02:30:48

Meillo hat geschrieben: ↑ zum Beitrag ↑
09.04.2022 16:14:12
1) Das Escapezeichen ist der Unterstrich (_). Literale Zeichen sind die Standardzeichen. Schreibe den Ausdruck fuer das literale Wort: ``Haus''.
Haus
2) Das Escapezeichen ist der Unterstrich (_). Metazeichen sind die Standardzeichen. Schreibe den Ausdruck fuer das literale Wort: ``Haus''.
_H_a_u_s
3) Das Escapezeichen ist das grosse X. Metazeichen sind die Standardzeichen. Schreibe den Ausdruck fuer das literale Wort: ``Haus''.
XHXaXuXs
4) Das Escapezeichen ist das kleine a. Literale Zeichen sind die Standardzeichen. Schreibe den Ausdruck fuer das literale Wort: ``Haus''.
aHaaauas
5) Suche dir ein Escapezeichen aus. Literale Zeichen sind die Standardzeichen. Schreibe die Zeichenfolge: Literales `D', literales 'F', literales `D', literales 'E', Metazeichen `J', literales `R', literales `E', literales `s', literales `!', Metazeichen `J', Metazeichen `@'.
Gewähltes Escapezeichen: \
Regulärer Ausdruck: DFDE\JREs!\J\@
6) Schreibe den gleichen Text aus (5) aber mit Metazeichen als Standardzeichen.
\D\F\D\EJ\R\E\s\J@
7) Das Escapezeichen ist die oeffnende runde Klammer (`('). Suche dir aus, welche Zeichenart die Standardzeichen sind. Schreibe einen Ausdruck mit nur oeffnenden und schliessenden runden Klammern und erklaere ihn anschliessend.
  • Standardzeichen = Literale Zeichen.
  • Es ergibt sich folgende Zeichenkette: "(())". Gelesen von links nach rechts: [Klammer auf als Escapezeichen], Klammer auf, [Klammer auf als Escapezeichen], Klammer auf, Klammer zu, Klammer zu".
8) Das Escapezeichen ist das Komma (,). Literale Zeichen sind die Standardzeichen. Beschreibe den Ausdruck (vgl. (5)): ``A,BCD,E,FG,,H''
  • Literales Zeichen “A”, Metazeichen “B”, literales Zeichen “C”, literales Zeichen “D”, Metazeichen “E”, Metazeichen “F”, literales Zeichen G, Metazeichen “,”, literales Zeichen H.
  • “Lesbare” Zeichenkette (ohne Metazeichen): “ACDGH”.
9) Das Escapezeichen ist das Komma (,). Metazeichen sind die Standardzeichen. Beschreibe den Ausdruck: ``hello, world''
  • Metazeichen “h”, Metazeichen “e”, Metazeichen “l”, Metazeichen “l”, Metazeichen “o”, literales Zeichen ” “, Metazeichen ”w”, Metazeichen “o”, Metazeichen “r", Metazeichen “l”, Metazeichen “d”.
  • “Lesbare” Zeichenkette (ohne Metazeichen): ” “.
10) Das Escapezeichen ist das kleine a. Literale Zeichen sind die Standardzeichen. Beschreibe den Ausdruck: ``Haus''
  • Literales Zeichen “H”, Metazeichen “u”, literales Zeichen “s”.
  • “Lesbare” Zeichenkette (ohne Metazeichen): “Hs”
11) Das Escapezeichen ist das kleine a. Literale Zeichen sind die Standardzeichen. Beschreibe den Ausdruck: ``Haaus''
  • Literales Zeichen “H”, Metazeichen a, literales Zeichen u, literales Zeichen s.
  • “Lesbare” Zeichenkette (ohne Metazeichen): “Hus”
12) Das Escapezeichen ist das kleine a. Metazeichen sind die Standardzeichen. Beschreibe den Ausdruck: ``Haaus''
  • Metazeichen “H”, literales Zeichen “a”, Metazeichen “u”, Metazeichen “s”.
  • “Lesbare” Zeichenkette (ohne Metazeichen): “a”
13) Schreibe ein Programm, das literalen Text passend escapet. Das Escapezeichen und die Entscheidung, welche Zeichenart die Standardzeichen sind, sollen variabel sein (z.B. CLI-Argumente). Pruefe damit deine Loesungen fuer die Aufgaben (1) bis (7).
Habe meine Lösung ins NoPaste hochgeladen: NoPaste-Eintrag41637
14) Auf die vorigen Aufgabe aufbauend: Schreibe ein Programm, das den escapeten Text wieder einliest und eine sprachliche Beschreibung davon ausgibt, aehnlich wie in (5). Pruefe damit deine Loesungen fuer die Aufgaben (8) bis (12).
Habe meine Lösung ins NoPaste hochgeladen: NoPaste-Eintrag41639


Anhang:
Für das Hochladen ins NoPaste musste ich allen Dateinamen die Endung ".txt" hinzufügen. Bitte nach dem Download umbenennen (".txt" entfernen).
  • manuell eingetippte Daten (RData-Dateien): df_Aufgabe_5.RData und df_Aufgabe_7.RData.
  • HTML-Datei (gemeinsame, schöne Darstellung von Befehlen und Outputs): Ich habe es leider nicht geschafft, die HTML-Datei unverändert/korrekt ins NoPaste hochzuladen. Bei Auswahl der Datei bekomme ich (sowohl mit Dateiendung ".html" als auch mit Dateiendung ".txt") den Fehler "Disallowed Content". Per Copy&Paste konnte ich die HTML-Datei zwar ins NoPaste hochladen [1], allerdings wird dabei scheinbar die Kodierung (?) beschädigt. Die Datei lässt sich nach dem Download (und anschließender Änderung der Dateiendung auf ".html") zwar mit Firefox öffnen, aber an allen Stellen, an denen ursprünglich Umlaute standen, werden nun "?"-Symbole angezeigt. Während in den Code-Blöcken scheinbar "nur" die Umlaute betroffen sind, werden im Fließtext auch weitere Sonderzeichen (u. a. die Anführungszeichen) durch das "?"-Symbol ersetzt, was das Dokument sehr unleserlich macht :(. Habt ihr eine Idee, wie ich die HTML-Datei ins NoPaste hochladen könnte, ohne sie zu "beschädigen"?
Für Bearbeitung genutzte Quellen bzw. Anleitungen: Fußnoten:
[1] https://nopaste.debianforum.de/41635

EDIT (14.04.2022, 09 Uhr): NoPaste-Link für die Datei df_Aufgabe_7 korrigiert. ALT (falsch): https://nopaste.debianforum.de/41636. NEU (richtig): https://nopaste.debianforum.de/41629.
Zuletzt geändert von tegula am 14.04.2022 08:59:38, insgesamt 2-mal geändert.

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von Meillo » 14.04.2022 08:03:49

Wow, tegula, da hast du die Messlatte aber hoch gelegt, mit dieser Antwort! :THX:

Gut ist aber auch, dass deine Antworten nicht alle korrekt sind, denn nichts waere der Diskussion abtraeglicher wie wenn die allererste Antwort sofort in jeder Weise korrekt und vollstaendig waere. ;-) So aber ist das genau passend, denn jetzt kann man sich darueber unterhalten welche Antworten richtig sind und welche nicht.
Use ed once in a while!

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von buhtz » 14.04.2022 09:54:35

zu 1)
Haus

zu 2)
_H_a_u_s

zu 3)
XHXAXUXS

zu 4)
Haus

zu 5)
Escapezeichen ist \
DFDE\JREs!\J\@

zu 6)
Escapezeichen ist \
\D\F\D\EJ\R\E\s\!J@

zu 7)
Standardzeichen sind Literale
(()
Die öffnende Klammer kann nur als literal "gedruckt" werden, in dem es mit sich selbst escaped wird.

zu 8)
- ergibt ACDG,H
- allerdings sind hier noch die Steuerzeichen (mit unklarer Wirkung) B und E
- und das Komma escaped sich selbst um gedruckt zu werden

zu 9)
Ergibt nur ein (Leerzeichen). Die restlichen Zeichen sind Steuerzeichen.

zu 10)
ergibt Hs, da das u zum Steuerzeichen wurde.

zu 11)
ergibt Haus da sich das a selbst escaped hat, um gedruckt zu werden.

zu 12)
Ergibt einen leeren String, da das zweite A zum Metazeichen escaped wurde

zu 13) & 14)
Geile Aufgabe. Ich hoffe ich finde noch Zeit, dazu etwas mit Python zu liefern.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Huo
Beiträge: 614
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von Huo » 14.04.2022 10:34:27

4) Das Escapezeichen ist das kleine a. Literale Zeichen sind die Standardzeichen. Schreibe den Ausdruck fuer das literale Wort: ``Haus''.
Bei Aufgabe 4 sehe ich, dass tegula und buhtz zu unterschiedlichen Ausdrücken gelangt sind. Ich darf noch einen weiteren Vorschlag in den Ring werfen: "Haaus"
10) Das Escapezeichen ist das kleine a. Literale Zeichen sind die Standardzeichen. Beschreibe den Ausdruck: ``Haus''
buhtz hat geschrieben: ↑ zum Beitrag ↑
14.04.2022 09:54:35
zu 10)
ergibt Hs, da das u zum Steuerzeichen wurde.
Ich denke, Deine Lösung ist schon richtig, aber ich frage mich, ob ihre Formulierung nicht unzulässig ist. Das "u", das zum Metazeichen escapet geworden ist, könnte doch beispielsweise die Bedeutung haben: "Verdoppele das vorstehende literale Zeichen"; dann würde sich "HHs" ergeben.

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von TuxPeter » 14.04.2022 10:50:26

Gut, dass anscheinend nicht alles korrekt ist. *) Ich habe bei drei Fragen andere Lösungen. (Ob ich mich noch an die Programmierung mache, weiß ich nicht, wenn dann suupersimpel)

Möchte aber noch mal auf die Meta-Ebene klettern und ein paar persönliche Anmerkungen machen.
Also, großes Meta-Zeichen
Obwohl es ja logisch sofort einsehbar ist, war mir nicht klar, dass man ENTWEDER die Metazeichen ODER die Literale escapen (bzwe quoten - ist das eigentlich dasselbe?) kann. Kam mir teilweise vor wie ein Rechtshänder, der einen Linkshänder spielen soll, der manchmal wieder den Rechtshänder spielen soll.

Obwohl wir ja die Konzepte in der natürlichen Sprache andauernd anwenden. Und da gibt es etwa das bekannte Beispiel von Singe: "Fuchs, du hast die Gans gestohlen." gegen Singe, Fuchs: "Du hast die Gans gestohlen."
Oder A erzählt B, dass C gesagt hat: Er sagte: "Du bist ein Dummkopf!" Hier ist A der Beleidigte. Und dann in indirekter Rede, gewissermaßen grammatisch escaped: Er sagte, du seiest ein Dummkopf! (Oder heißt es etwa, du wärest ein Dummkopf? Egal, jedenfalls ist jetzt B beleidigt. Obwohl der Satz vielleicht weitergeht mit ... wenn du den Vorschlag nicht akzeþtierst. Nun, wenn weiterhin A beleidigt werden soll, müsst es ja heißen: Er sagte, ich sei ein Dummkopf.
Und damit meint C keinesfalls sich selbst. Man sieht also, dass die sog. natürliche Sprache natürlich auch nicht einfacher ist als die formale der RegExp, wenn man versucht, es genau zu nehmen, jedenfalls, wir sind da nur besser trainiert.

Aber nehmen wir mal Programmiersprachen.

Alle Schlüsselwörter und alle vom Programmierer erdichteten (definierten) Bezeichner sind für den Compiler erst mal Standardtext und insofern literal zu nehmen. Oder doch nicht? Sind vielleicht die Daten, egal ob als Konstanten einprogrammiert oder zur Laufzeit eingelesen, die Literale und das ganze Programm die Meta-Ebene? Oder greifen die Begriffe da gar nicht? Jedenfalls gibt es ein paar nützliche Unterscheiungen. Was mit Alpha-Zeichen beginnt, sind Schlüssel- oder Programmiererwörter, deshalb werden sie vom Compiler literal genommen und behandelt, numerische Konstanten beginnen mit Ziffern und müssen deshalb nicht gequotet werden und können als Wertausdruck direkt arithmetisch behandelt werden, alphanumerische Konstanten müssen gequotet werden, damit sie nicht mit den Wörtern der Programmiersprache verwechselt werden.

Ich finde, eigentlich sollte Programmiersprache gar nicht Sprache genannt werden, es ist mehr eine Metapher für die Art und Weise, wie wir die Hardware in den Griff bekommen - indem wir uns "virtuelle Computer" schufen, um die gewaltigen, elektronischen Ansammlungen von NOT OR AND mit den variablen Verknüpfungen, die wir CPU oder Prozessor nennen, in einer für menschliche Köpfe kompatiblen Art und Weise zu bedienen.

Eventuell drehen sich bei diesen Ausführungen in Informatik [aus]gebildeten Menschen die Zehennägel nach oben, aber sorry dafür, ich lass mich gern verbessern.

Edit: *) bezog sich auf tegula

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

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von Meillo » 14.04.2022 11:55:46

Bislang gibt es drei verschiedene Antworten bei Aufgabe 4 -- wunderbar! Jetzt koennte jeder von euch mal erklaeren wie ihr zu eurer Antwort gekommen seid und warum ihr denkt, dass die richtig ist. So lernen wir alle dazu.
Use ed once in a while!

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: RegExp-Kurs 02: Metazeichen & Escaping

Beitrag von thoerb » 14.04.2022 12:09:54

Huo hat geschrieben: ↑ zum Beitrag ↑
14.04.2022 10:34:27
Bei Aufgabe 4 sehe ich, dass tegula und buhtz zu unterschiedlichen Ausdrücken gelangt sind. Ich darf noch einen weiteren Vorschlag in den Ring werfen: "Haaus"
Ja, das würde ich auch so machen, ist das Gleiche wie bei Aufgabe 1, nur in diesem Fall muss das a escaped werden, weil es ja auch als Escape-Zeichen dient.
Zuletzt geändert von thoerb am 14.04.2022 12:12:53, insgesamt 1-mal geändert.

Antworten