Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

##In Arbeit, nicht veröffentlicht##

Starten wir mit ein paar einfacheren Metazeichen, den simplen Platzhaltern, Positionsmarkern und Wiederholungsoperatoren. Nehmen wir an, wir würden folgender (nicht ganz schlüssiger) Auflistung ausschließlich die Pronomen der zweiten Person Singular entnehmen wollen:

...

Quantitativer OperatorBedeutung

*

 

das vorausgehende Zeichen kommt beliebig oft vor (0 bis unendlich)
?das vorausgehende Zeichen kommt 0 oder 1 mal vor
+das vorausgehende Zeichen kommt 1 mal oder häufiger vor

{3}

das vorausgehende Zeichen kommt genau 3 mal vor
 {1,3}das vorausgehende Zeichen kommt 1, 2 oder 3 mal vor

...

Suchen wir hier nach d.* oder nach d.+ wird die gesamte Zeile markiert, da . auch für Leerstellen stehen kann. Warum sucht man dann nicht einfach nach d.* oder d.+ gefolgt von einer Leerstelle, also (Achtung: ein grauer Underscore wird in diesem Manual aus Gründen der Sichtbarkeit dazu verwendet, um Leerstellen in einem regulären Ausdruck zu markieren. Ein tatsächlicher Underscore im Ausdruck bleibt schwarz!) d.*_ oder d.+_? Die Idee dahinter wäre mit "Suche nach d gefolgt von einer beliebigen Anzahl von Zeichen (je nach * oder +: mindestens 0 oder 1), aber stelle sicher, dass auf diese eine Leerstelle folgt!" zu umschreiben. Dies funktioniert sogar tatsächlich, allerdings anders als erwartet. Der Grund dafür liegt darin, dass die Operatoren + und * reguläre Ausdrücke in ihrem Wesen gierig sind. Man setze einen regulären Ausdruck an das linke Ende der "d ich ihr dich mir..."-Tafel und sage ihm, er dürfe nun alles verspeisen, dass unter d.*_ fällt. Es Im nächsten Augenblick würde er sich gierig bis an das rechte Ende von dorthin strecken, doch (kurz bevor er seine Gabel versenken kann) verdutzt feststellen, dass auf dorthin keine Leerstelle folgt. Also würde er sich leicht unzufrieden in Richtung seines Sitzplatzes zurückbewegen, bis er die Leerstelle im Anschluss an andere findet. Das gilt nicht nur für die die Wiederholungsoperatoren + und *, sondern auch für ? und {min,max}.    Steht auf dem Diätplan des regulären Ausdrucks d.?, so wird er - gierig, wie er ist - d. nach Möglichkeit dem mageren d bevorzugen.
Ob er für das alles nicht doch zu faul ist, fragt sich der Ausdruck eigentlich nie - es sei denn, man zwingt ihn dazu. Und wie ließe sich

Da das letzte Wort der Reihe ohnehin nicht unter den Ergebnissen auftauchen soll, kann

##gierig vs. faul##

##. auch leerstelle##

der Zweifel an der Größe der eigenen Gier besser ausdrücken als durch ein ?? Fügt man an die bereits besprochenen Ausdrücke d.*, d.+, d.? und d. {1,3} ein Fragezeichen an, so zwingt man den regulären Ausdruck zur laziness. Die Wiederholung des vorausgehenden Zeichens wird wie durch den Wiederholungsoperator vorgeschrieben durchgeführt, allerdings wird sie nur so häufig durchgeführt wie nötig.

Quantitativer OperatorBedeutung

*?

das vorausgehende Zeichen kommt beliebig oft vor (0 bis unendlich)

aber: wähle die geringstmögliche Anzahl

??

das vorausgehende Zeichen kommt 0 oder 1 mal vor

aber: lieber 0 als 1 mal

+?

das vorausgehende Zeichen kommt 1 mal oder häufiger vor

aber: wähle die geringstmögliche Anzahl

 {1,3}?

das vorausgehende Zeichen kommt 1, 2 oder 3 mal vor

aber: wähle die geringstmögliche Anzahl

 

Während also d.*_ "d ich ihr dich mir ihn er uns wir sie euch du Ihnen Sie dir sie ihm andere " umfasst, liefert d.*?_ gleich mehrere (kleinstmögliche) Ergebnisse "d ", "dich ", "du ", "dir " und "dere " (dorthin nicht, da es von keiner Leerstelle gefolgt wird). Um die Ergebnisse zu verfeinern, ließe sich auch hier mit Positionsdefinitionen arbeiten. Alle gesuchten Pronomen zeichnen sich durch ein d am Wortanfang aus. Um ein Zeichen am Wortanfang zu verankern, steht uns der Positionsanker \<zur Verfügung (s.o.), also \<d.*?_ oder \<d.+?_. Auf diese Weise wird auch dere herausgefiltert. Bleibt nur noch eins zu klären: Wie wird man auch das "d" zu Beginn der Zeile los? Zum jetzigen Zeitpunkt leider nur mit einer Verlegenheitslösung. Weder + noch * scheinen für die Suche ideal. *  bewirkt in \<d.*?_, dass das d am Zeilenanfang samt Leerstelle mit einbezogen wird.  \<d.+?_ schreibt vor, dass zwischen dem d und der Leerstelle mindestens ein weiteres Zeichen vorhanden sein muss. Das ist es jedoch nicht, weshalb hier die Leerstelle und das gesamte folgende Wort vor der nächsten Leerstelle einbezogen werden

 

d ich ihr dich

Info
iconfalse
titleAn die Hand

 

 

Es ist wichtig zu betonen, dass laziness nicht bedeutet, dass nur Ergebnisse ausgegeben werden, die dem kürzesten Muster entsprechen. Es weist lediglich an, bei mehreren Möglichkeiten den kurzmöglichsten Ausschnitt zu wählen.
_d. {1,3}?_

 ##einzeilige auflistung##

##Bsp: was bringt mir das? Konjug./ Dekl -> komplexer.####an die hand##