User:Hegen/Test

From Apache OpenOffice Wiki
Jump to: navigation, search


Editing.png Der Artikel befindet sich im Aufbau (ENTWURF) und wird gerade geschrieben.


Einführung

In einfachen Worten, Reguläre Ausdrücke (RegEx für Regular Expressions HJS) sind ein intelligenter Weg um Text zu suchen oder zu ersetzen (vergleichbar zu 'Joker'-Zeichen). Reguläre Ausdrücke können sowohl mächtig als auch kompliziert sein. Das macht es für unerfahrene Nutzer leicht fehleranfällig. Wir wollen die Nutzung von OpenOffice.org – Regulären Ausdrücken einerseits so hilfreich darstellen, dass es für einen Neuling klar genug ist und andererseits die Aspekte detailliert darstellen die erfahrenere Nutzer irritieren können.

Eine typische Anwendung für RegEx ist das Finden von Text in einem Writer-Dokument; z.B. um alle Vorkommen von „man“ oder „woman“ in ihrem Dokument zu finden, kann man einen RegEx anwenden der beide Worte findet.

RegEx werden in verschiedenen Bereichen der Datenverarbeitung häufig angewendet, und werden daher oft als regex oder regexp abgekürzt. Aber nicht alle regex sind gleichartig – daher muss man die entsprechende Anleitung (Manual) genau lesen.

Wo Reguläre Ausdrücke im OOo genutzt werden

Im Writer-Modul:

  • Bearbeiten – Suchen & Ersetzen
  • Bearbeiten – Änderungen – Akzeptieren oder Verwerfen (Tabulator Filter)

Im Calc-Modul:

  • Bearbeiten – Suchen & Ersetzen
  • Daten – Filter – Standardfilter & Spezialfilter
  • in einigen Funktionen, y.B. SUMWENN (sumif), SVERWEIS (lookup)

In Base:

  • Suche Datensatz

Die Dialoge beim Aufruf dieser Funktionen haben immer eine Option RegEx zu nutzen (ist aber als Standardwert ausgeschaltet). Zu Beispiel:

location of regular expression tick box
Position des Auwahlschalters für Reguläre Ausdrücke

Man sollte den Status dieser Option jedes mal beim Aufruf des Dialogs kontrollieren, da er standardmäßig ausgeschaltet ist.

Ein einfaches Beispiel

Wenn man wenig oder gar keiner Erfahrung von RegEx hat, wird man es am einfachsten finden sie im Writer-Modul zu erproben anstelle sagen wir im Calc-Modul.

Im Writer rufen wir den „Suchen & Ersetzen“ Dialog aus dem Bearbeiten Menü auf.

Im Dialog, wählen wir „Mehr Optionen“ und klicken die „Regulären Ausdrücke“-Box an.

In die Suchbox tragen wir „r.d“ ein – der Punkt bedeutet hier 'jedes einzelne Zeichen'.

Wenn man jetzt den Suche alles Knopf betätigt, werden alle Stellen an denen ein r gefolgt von einem anderen Zeichen, gefolgt von einem d auftaucht gefunden, z.B. red oder 'hotrod' oder 'bride' oder 'your dog' (im letzten Beispiel wird r gefolgt von einem Leerzeichen (space) gefolgt von einem d gefunden – der Abstand (Leerzeichen) ist ein Zeichen).

Gibt man xxx in die Ersetzen mit Box ein, und betätigt man den Ersetzen alles Knopf, so bekommt man 'xxx', 'hotxxx', 'bxxxe', 'youxxxog' .

Das mag nicht sehr sinnvoll erscheinen, aber es demonstriert das Prinzip. Wir werden den Suchen und Ersetzen Dialog im Weiteren genauer erklären.

Das Mindeste was sie über Reguläre Ausdrücke wissen müssen

Wenn Sie nicht genau wissen wollen wie RegEx normalerweise arbeiten, aber ihre Aufgabe erfüllt heben wollen, werden sie diese allgemeinen Beispiele nützlich finden. Geben sie sie in das 'Suche nach'-Feld ein, und sorgen sie dafür das die RexEx-Option eingeschaltet ist.

  • color|colourfindet color und colour (beide Wörter richtig)
  • sep.rate findet sep dann ein beliebiges Zeichen rate - so separate, seperate, und wirklich auch sepXrate
  • sep[ae]rate findet separate und seperate - [ae] bedeutet entweder ein a oder ein e
  • changed? findet change und changed - das d ist optional weil es von einem Fragezeichen gefolgt wird
  • s\> findet das s am Ende des Wortes
  • \<. findet den ersten Buchstaben eines Wortes.
  • ^. findet den ersten Buchstaben eines Absatzes
  • ^$ findet einen leeren Absatz

Wie Reguläre Ausdrücke in OOo angewendet werden

OOo RegEx scheinen den zu durchsuchenden Text in Portionen aufzuteilen und jede einzelne Portion separat zu Untersuchen.

Im Writer-Modul tritt Text in Absätze geteilt auf. Z.B. x.*z entspricht nicht einem x am Ende eines Absatzes dessen nächster Absatz mit einem z beginnt (x.*z bedeutet ein x dann irgend ein oder gar kein Zeichen dann z).Absätze werden also seperat untersucht (obwohl wir am Ende dieser Handreichung (HowTo) einige spezielle Fälle diskutieren werden).

the scope of regular expressions
Die Reichweite Regulärer Ausdrücke

Zusätzlich betrachtet Writer jede Tabellenzelle und jedes Frame separat. Text Frames (Textrahmen) werden nach allen anderen Text oder Tabellenzellen untersucht.

Im Suchen & Ersetzen Dialog werden RegEx im Suchen nach Feld eingesetzt. Normalerweise werden sie nicht im Ersetzen Feld verwendet.. Die Ausnahmen werden später dargestellt.

Buchstaben/Literale

Wenn im RegEx Zeichen enthalten sind die keine sogenannten 'Sonderzeichen' . ^ $ * + ? \ [ ( { | sind, so werden sie als Buchstaben (bzw. Literale) bezeichnet.

Zum Beispiel: red entspricht red redraw und Freddie.

OOo erlaubt es zwischen der Unterscheidung von GROßBUCHSTABEN (UPPER CASE) und kleinbuchstaben (lower case) oder ihrem Ignorieren zu wählen. Wenn man die Box 'Groß-/Kleinschreibung' im Suchen & Ersetzen-Dialog anwählt, entspricht red nicht RED oder F'RED; anderfalls wird die Schreibweise ignoriert und beide werden gefunden.


Sonderzeichen

Die Sonderzeichen sind . ^ $ * + ? \ [ ( { |

Sie haben besondere Bedeutungen in RegEx, die wir beschreiben werden.

Braucht man eines dieser Zeichen in seiner eigenen Zeichenfunktion, wird ein Backslash '\' (umgedrehter Schrägstrich) vor das Zeichen gesetzt.

Zum Beispiel: für die Suche nach $100 nutzt man \$100 – das \$ nimmt man für $ .

Einzelzeichensuche mit . oder ?

Das Punkt .' Sonderzeichen steht für jedes einzelne Zeichen (außer Zeilenvorschub).

Zum Beispiel: r.d entspricht 'red' und 'hotrod' und 'bride' und 'your dog'


Das Fragezeichen '?' steht für 'keines oder genau dem Zeichen dem es folgt' bzw. 'zeige das vorangegangene Zeichen wenn es vorhanden ist'.

Zum Beispiel: rea?d entspricht 'red' und 'read' - 'a?' heißt 'etspreche einem einzelnen Zeichen a soweit eins vorhanden ist'.


Sonderzeichen können in Kombination miteinander angewendet werden. Ein Punkt mit einem folgenden Fragezeichen heißt 'Vorkommen eines einzelnen Zeichens soweit eins da ist'.

Zum Beispiel: star.?ing entspricht 'staring', 'starring', 'starting', und 'starling', aber nicht 'startling'


Wiederholtes Finden mit + * {m,n}

Das Sonderzeichen Plus '+' bedeutet 'Vorkommen eines oder mehrerer der vorangestellten Zeichens'.

Zum Beispiel: re+d entspricht 'red' und 'reed' und 'reeeeed' - e+ heißt ein oder mehrere e's.


Das Sonderzeichen Stern '*' heißt 'entspreche keinem oder mehreren des vorangegangenen Zeichens'.

Zum Beispiel: rea*d entspricht 'red' und 'read' und 'reaaaaaaad' - 'a*' bedeutet kein oder mehrmaliges Vorkommen von a's .


Eine übliche Verwendung für '*' ist nach dem Punkt-Zeichen – d.h. '.*' bedeutet 'jedes oder kein Zeichen'.

Zum Beispiel: rea.*d entspricht 'read' und 'reaXd' und 'reaYYYYd' aber nicht - 'red' oder 'reXd'


Benutze den Stern '*' mit Vorsicht, es findet (und verwendet) alles was möglich ist.

Zum Beispiel: 'r.*d' findet 'red' aber wenn der Absatz im Writer 'The referee showed him the red card again' umfasst, ist das Gefundene 'referee showed him the red card' - d.h. Das erste 'r' und das letzt mögliche 'd'. Reguläre Ausdrücke sind ihrer Natur nach gierig.


Man kann mit geschweiften Klammern { } angeben wie oft der Treffer wiederholt werden soll. Z.B. a{1,4}rgh! wird argh!, aargh!, aaargh! und aaaargh! finden – mit anderen Worten gesagt zwischen 1 und 4 a's gefolgt von rgh!


Beachte auch das a{3}rgh! genau 3 a's finden, d.h. aaargh!, und a{2,}rgh! (mit einem Komma) entsprechen mindestens 2 a's, z.B- aargh! und aaaaaaaargh!.


Positionssuche ^ $ \< \>

Das Zirkumflex (oder auch Dach-)Sonderzeichen '^' bedeutet 'Finden am Textanfang'.

Das Dollar-Zeichen '$'bedeutet 'Finden am Ende des Textes'.


Man erinnere sich, dass OOo RegEx den untersuchten Text unterteilt – jeder Absatz wird gesondert betrachtet.

"Zum Beispiel:" ^red entspricht 'red' am Anfang des Absatzes (red night shepherd's delight).

"Zum Beispiel:" red$ entspricht 'red' am Ende des Absatzes (he felt himself go red).

"Zum Beispiel:"^red$ entspricht dem Inhalt einer Zelle die nur 'red' enthält.


Zusätzlich dazu wird ein 'harter Zeilenwechsel' (durch Umschalt-Enter eingegeben) als Anfang oder Ende eines Textes angesehen und durch ^ oder $ gefunden.


Das Backslash-Zeichen '\' hat in Kombinationen von '\<' und '\>' besondere Funktionen, insbesondere 'Finde am Wortanfang' und 'Finde am Wortende'.

"Zum Beispiel:"\<red entspricht red am Wortanfang (she went redder than he did).

"Zum Beispiel:"red\> entspricht red am Wortende (although neither of them cared much.)


Das Charakteristikum um den Worbeginn/Wortende zu bestimmen ist das das voangegangene bzw. folgende Zeichen ein Leerzeichen, ein Unterstreichungsstrich (_), ein Tabulator, ein Zeilenwechsel, ein Absatz oder irgendein nicht-alphanumerisches Zeichen ist.

"Zum Beispiel:"\<red entspricht 'person@rediton.com'

"Zum Beispiel:"red\> entspricht 'I said, "No-one dared" '


Alternatives Vorkommen | [...]

Das Pipe-Zeichen (senkrechter Strich) '|' ist ein Sonderzeichen das den Ausdruck auf der einen oder anderen Seite vom '|' als Treffer erkennt.

"Zum Beispiel:"red|blue entspricht 'red' und 'blue'


Leider werden manche Ausdrücke die nach einer Pipe stehen nicht ausgewertet. Das betrifft soweit bekannt ^ und rückwirkende Bezüge. Das ist auch der Inhalt der Fehlermeldung issue 46165

"Zum Beispiel:"^red|blue entspricht Absätzen beginnend mit 'red' und jedes Vorkommen von 'blue', aber blue|^red entspricht unkorrekterweise nur jedem Vorkommen von 'blue', und findet Absätze die mit 'red' beginnen nicht.


Die eckigen Klammern [ sind besondere Sonderzeichen. Zeichen die durch Eckige Klammern eingeschlossen werden werden als Alternativen bewertet – jedes von ihnen erfüllt die Suche.Man kann sowohl Reihen von Zeichen wie a-z und 0-9 oder jedes einzelne Zeichen wie abcdefghijklmnopqrstuvwxyz oder 0123456789 eingeben.

"Zum Beispiel:"r[eo]d entspricht 'red' und 'rod' aber nicht 'rid'

"Zum Beispiel:"[m-p]ut entspricht 'mut' und 'nut' und 'out' und 'put'

"Zum Beispiel:"[hm-p]ut entspricht 'hut' und 'mut' und 'nut' und 'out' und 'put'


Sonderzeichen in eckige Klammern eingeschlossen haben nicht die entsprechenden abweichenden Bedeutungen. Die einzigen Zeichen mit besonderer Bedeutung sind ], -, ^ and \. Deren Bedeutung ist dann:

  • ] - die schließende eckige Klammer beendet die alternative Zeichenmenge [abcdef]
  • ^ - Ist das Karet (Dach) das erste Zeichen zwischen den eckigen Klammern negiert es die Suche. "Zum Beispiel:" [^a-dxyz] entspricht allen Zeichen außer abcdxyz.
  • \ - der Backslash erlaubt den Sonderzeichen ], -, ^ und \ in ihrer eigentlichen Form genutzt zu werden, oder hexadezimale Codes einzugeben.

"Zum Beispiel:"\] steht für eine Zeichenkette mit einer schließenden eckigen Klammer, wie [[\]a] für eine öffnende eckige Klammer [, eine schließende eckige Klammer ] oder ein a steht. \x0009 steht für ein Tabulator-Zeichen.


Noch mal zur Wiederholung: das sind die Bedeutungen dieser Zeichen innerhalb von eckigen Klammern, viele andere Zeichen werden direkt gefunden.

"Zum Beispiel:"[\t ] entspricht 't' oder einem Leerzeichen - nicht einem Tabulator oder einem Leerzeichen. Für einen Tabulator oder Leerzeichen nutzt man [\x0009 ].


POSIX Klammerausdrücke [:alpha:] [:digit:] usw.

Es gibt eine ganze Menge Irritation darüber in der OpenOffice.org community. Sogar die Help-Dokumentation ist unklar formuliert.

Es gibt eine Reihe von `POSIX Klammerausdrücken' (manchmal als 'POSIX Zeichenklasse' bezeichnet) die in Ooo RegEx verfügbar sind in der Form [:classname:], die es erlauben irgend ein Zeichen dieser Klasse zu finden. Z.B. [:digit:] entspricht irgend einem Zeichen von 0123456789.


Per Definition dürfen sie nur innerhalb der eckigen Klammern einer alternativen Suche auftreten – würde eine gültige Syntax [abc[:digit:]] sein, die a, b, c, oder jede Zahl 0-9 finden sollte. Eine korrekte Syntax für jede Zahl wäre [[:digit:]].


Leider funktioniert das nicht so wie es sollte! Die korrekte Sytax funktioniert überhaupt nicht, aber derzeit findet die "falsche" Darstellung ([:digit:]) eine Zahl wenn sie sich außerhalb der eckigen Klammern einer alternativ Suche befindet. („Natürlich ist das unbefriedigend und wird in der Fehlermeldung issue 64368 behandelt).


Die POSIX-Klammerausdrücke die zur Verfügung stehen sind unten aufgelistet. Man Beachte, das die exakte Definition von der "Lokalisierung" abhängt – z.B. das in einer anderen Sprache andere 'Buchstaben' in [:alpha:] erwartet werden können. Die hier aufgeführten Bedeutungen gelten für englische Muttersprachler (und nehmen keinen Bezug auf Unicode Ausführungen).


[:digit:] 
steht für jede Zahl 0123456789. Das entspricht 0-9.


[:space:] 
sollte für jedes whitespace Zeichen (Abstands-Zeichen Leer, Tab, usw.) stehen, obwohl es eigentlich nur das Leerzeichen darstellt. Man Beachte, das die Hilfe hier in die Irre führt. (Gegenstand der Fehlermeldung issue 41706).


[:print:] 
sollte für jeder druckbare Zeichen stehen, trotzdem findet es derzeit nicht die (einfachen oder doppelten) Anführungsstriche ‘ ’ “ ” (und einige andere wie « »). Es findet Leerzeichen aber keine Tabulatorzeichen (das ist späterer erwarteter /definierter Inhalt). (Fehlermeldung: issue 83290).


[:cntrl:] 
steht für ein Steuerzeichen. Soweit es Nutzer betrifft, hat OOo sehr wenige Steuerzeichen, Tabulator und harter Zeilenumbruch werden beide gefunden, die Absatzmarke jedoch nicht.


[:alpha:] 
stehen für einen Buchstaben (einschließlich Buchstaben mit Akzent). Z.B. in der Phrase 'déjà vu' (die im Englischen öfters verwendet wird und hier mit den Akzenten der Originalsprache geschrieben ist) werden alle 6 Buchstaben gefunden.


[:alnum:] 
steht für Zeichen die entweder [:alpha:] oder [:digit:] sind.


[:lower:] 
setht für Kleinbuchstaben (einschließlich Buchstaben mit Akzent). Die Großschreibungs- Unterscheidung funktioniert wenn die Groß/Kleischreibung sbox nicht markiert ist, ansonsten entspricht die Wirkung [:alpha:].


[:upper:] 
steht für Großbuchstaben (einschließlich Buchstaben mit Akzent). Die Großschreibungs- Unterscheidung funktioniert nur wenn die Groß/Kleischreibung sbox markiert ist, ansonsten entspricht die Wirkung [:alpha:].


Es erscheint etwas Unsystematisches in jeder Implementation von POSIX Klammerausdrücken zu stecken (OOo oder sonstwo). Eine alternative Herangehensweise ist, einfach die direkten Zeichenklassen zu verwenden – so z.B. anstelle von [[:digit:]] benutzt man [0-9].


Gruppieren (…) und Rückbezüge \x $x

Runde Klammern '"( )"' können zum Gruppieren von Termen verwendet werden.


"Z.B.:" red(den)? wird 'red' und 'redden' finden; (den)?bedeutet 'ein oder keinmal den'.


"Z.B.:" (blue|black)bird findet sowohl 'bluebird' als auch 'blackbird'.


Jede Gruppe in runden Klammern ist zusätzlich als 'Bezug' (vergleichbar einer Variablen) definiert, und kann später im selben Ausdruck als 'Rückbezug' verwendet werden. In der 'Suche nach' Box werden Rückbezüge als '\1', '\2', etc. und in der 'Ersetzen durch' Box als '$1', '$2' usw.


'\1' oder '$1' steht für 'irgend etwas das zwischen den ersten runden Klammern stand'; '\2' or '$2' für 'irgend etwas das zwischen den zweiten runden Klammern stand' usw.


"Z.B." (blue|black) \1bird in der 'Suchen' Box wird sowohl 'blue bluebird' als auch 'black blackbird' finden, weil '\1' entweder für "blue" oder "black" steht, was immer auch gefunden wurde. Darum wird auch 'black bluebird' nicht gefunden.


'"Rückbezüge in der 'Ersetzen durch' Box funktionieren erst ab OOo2.4 aufwärts'". Die Nutzung von §1 anstelle von \1 hängt mit der Perl-Syntax zusammen, teilweise auch mit der ICU-Reguläre Ausdrücke-Engine (Bearbeitungsfunktion) , die in manchen Fällen die übliche Ooo-Bearbeitungsfunktion für reguläre Ausdrücke ersetzt, was zu vielen Fehler führen kann.


"Z.B.:" (gr..n)(blu.) in der Suchfunktion findet 'greenblue'; in der Erstezungsfunktion erzeugt $2$1 'bluegreen'.


Wenn die Regulären Ausdrücke zur Textersetzung von '$' verwendet werden, muss man dann mit '\$' entsprechend für '\' bei '\\' arbeiten.


"Z.B.:" im 'Suchen nach' Feld und \$$1 im 'Ersetzen durch' ersetzt '100' durch '$100', und '150' durch '$150'.


$0 im 'Ersetzen durch' Feld überschreibt mit dem gesamten gefundenen Text.


Tabulatoren, Zeile, Absatzmarke \t \n $

Das Zeichenpaar '\t' hat eine besondere Bedeutung – es steht für das tab (Tabulatorzeichen).


"Z.B.:" \tred findet ein tab Zeichen gefolgt vom Wort 'red'.


Im Writer kann ein Zeilenwechsel durch Umschalt-Eingabe ( Shift-Enter) eingegeben werden. Dabei wirt ein Zeilenumbruch-Zeichen in den Text eingefügt, und der folgende Text beginnt auf einer neuen Zeile. Das ist nicht das gleiche wie ein neuer Absatz. Klickt man "Steuerzeichen anzeigen" an sieht man den Unterschied.


Das Ooo RegEx Verhalten ist für Absatzmarken und Zeilenumbruch-Zeichen etwas 'ungewöhnlich'. Das kommt zum Teil davon , dass in anderen Programmen RegEx auf normalen Text angewendet wird, wo hingegen Ooo RegEx den Text an Absatzmarken unterteilt. Was auch immer der Grund ist, das kann man machen:


  • \n will match a newline (Shift-Enter) if it is entered in the Search box. In this context it is simply treated like a character, and can be replaced by say a space, or nothing. The regular expression red\n will match red followed by a newline character - and if replaced simply by say blue the newline will also be replaced. The regular expression red$ will match 'red' when it is followed by a newline. In this case, replacing with 'blue' will only replace 'red' - and will leave the newline intact.
  • red\ngreen will match 'red' followed by a newline followed by 'green'; replacing with say 'brown' will remove the newline. However neither red.green nor red.*green will match here - the dot . does not match newline.
  • $ on its own will match a paragraph mark - and can be replaced by say a 'space', or indeed nothing, in order to merge two paragraphs together. Note that red$ will match 'red' at the end of a paragraph, and if you replace it with say a space, you simply get a space where 'red' was - and the paragraphs are unaffected - the paragraph mark is not replaced. It may help to regard $ on its own as a special syntax, unique to OOo.
  • ^$ will match an empty paragraph, which can be replaced by say nothing, in order to remove the empty paragraph. Note that ^red$ matches a paragraph with only 'red' in it - replacing this with nothing leaves an empty paragraph - the paragraph marks at either end are not replaced. It may help to regard ^$ on its own as a special syntax, unique to OOo. Unfortunately, because OOo has taken over this syntax, it seems you cannot use ^$ to find empty cells in a table (nor empty Calc cells).
  • If you wish to replace every newline with a paragraph mark, firstly you will search for \n with Find All to select the newlines. Then in the Replace box you enter \n, which in the Replace box stands for a paragraph mark; then choose Replace. This is somewhat bizarre, but at least now you know. Note that \r is interpreted as a literal 'r', not a carriage return.
  • \n entspricht einem Zeilenwechsel(Shift-Enter) im 'Suchen nach' Feld. In diesem Zusammenhang wird es nur als ein einfaches Zeichen behandelt, und kann durch Beispielsweise ein Leerzeichen (Space) oder gar nicht ersetzt werden. Der RegEx-Ausdruck red\n entspricht red gefolgt von einem Zeilenwechsel-Zeichen - und wenn es nur durch blue ersetzt wird, wird der Zeilenumbruch mit ersetzt.Der RegEx-Ausdruck red$ entspricht 'red' wenn es von einem Zeilenumbruch gefolgt wird. In diesem Fall führt das Ersetzen durch'blue' nur zum Ersetzen von 'red' - da bei wird der Zeilenwechsel nicht verändert (bleibt intakt).
  • red\ngreen entspricht 'red' gefolgt von einem Zeilenumbruch gefolgt von 'green'; ein Ersetzen durch 'brown' entfernt den Zeilenumbruch.Jedenfalls weder red.green noch red.*green werden hier fündig – der Punkt . findet keinen Zeilenwechsel.
  • $ selbst entspricht der Absatzmarke -und kann z.B. mit Leerzeichen 'space' ersetzt werden oder entfernt werden, um zwei Absätze zu Vereinigen. Beachte: red$ entspricht 'red' am Absatzende, und wenn man es mit Beispielsweise einem Leerzeichen space ersetzt, erhält man nur ein Leerzeichen space wo 'red' war -und der Absatz bleibt unberührt – die Absatzmarke wird nicht ersetzt. Es kann helfen $ selbst als spezifische Syntax zu betrachten , einmalig in OOo.
  • ^$ entspricht einem leeren Absatz, der durch 'Nichts' ersetzt werden kann, wenn man den leeren Absatz entfernen will. Beachte: ^red$ entspricht einem Absatz der nur 'red' enthält – erstetzt man das mit 'Nichts' verbleibt ein leerer Absatz – die Absatzmarken an jedem Ende werden nicht ersetzt. Wie schon bekannt: Es kann helfen $ selbst als spezifische Syntax zu betrachten , einmalig in OOo. Leider kann man daher wahrscheinlich auch ^$ nicht nutzen um leere Zellen in Tabellen (oder auch im Calc ) zu finden, da diese Syntax im ganzen OOo übernommen wurde.
  • Will man jeden Zeilenwechsel mit einem Absatz ersetzen, muss man zunächst nach \n suchen mit ausgewähltem 'Finde alle' um die Zeilenwechsel zu markieren. Dann in der 'Ersetzen mit'-Zelle \n eingeben, das hier für die Absatzmarke steht, und dann Ersetzen auswählen. Das ist etwas bizarr, aber zumindest jetzt wissen Sie es. Beachte: \r wird als Zeichen 'r' interpretiert nicht als Zeilenschaltung (carriage return).


Zur Ersetzung von Absatzmarken – wie sie Benutzt werden um Zeilen eine bestimmte Länge in html-Dokumenten zu geben, z.B. durch "normale" automatisch umgebrochene Zeilen und Absätze, sollten folgende drei Schritte helfen:

1. Damit man keine "normalen" Absatzmarken am Ende "normaler" Absätze verliert, ersetzt man zwei aufeinander folgende Absatzmarken mit einer Zeichenfolge die sonst nicht im Text vorkommt, wie "*****" um einen leeren Absatz zu ersetzen – das macht es später einfacher ihn wiederzufinden und zu ersetzten. Das macht man durch Eingabe von ^$ in der 'Suchen' Zelle und "*****" in die 'Ersetzen' box. (Arbeitet man mit begrenzt ausgewähltem Text, darf man nicht vergessen die "Nur in Selektion" unter "Mehr Optionen" von "Suchen und Ersetzen zu markieren)

2. Man sucht nach den verbliebenen Zeilenende-Absatzmarken durch Eingabe von $ im 'Suchen' Feld. Um die Marke mit einem einfachen Leerzeichen zu Überschreiben braucht man bloß ein Leerzeichen im 'Ersetzen durch' Dialog einzugeben.

3. Jeztzt ist der Text breit für das Rückumwandeln des normalen Zeilenumbruchs durch Eingabe von "*****" in der 'Suchen' box und \n in der 'Ersetzen mit' box. (Beachte das Überprüfen von "Nur in Selektion" falls sie ausgewählt wurde.)


Vor dem erstmaligen Einsatz dieser Befehlsfolge, sollte man es an einem Testdokument geübt haben.


Für diese Befehlsfolge bietet sich ein Macro an.


Sie hilft auch indirekt bei Zeilenumbruchsproblemen.


Hexadezimal Codes \xXXXX

Die Zeichenfolge ' \xvierstellige Hexadezimal-Zahl' entspricht dem Zeichen mit diesem Code.


"Z.B.:" \x002A steht für das Stern-Zeichen '*'.


Die Hexadezimal-Codes sieht man beim "Einfügen-Sonderzeichen" Dialog.


Die 'Ersetzen mit' Box und \t \n & $1 $2

Nutzer sind manchmal verunsichert, was man alles mit der 'Ersetzen mit' Box im 'Suchen und Ersetzen' Dialog machen kann.


Im allgemeinen "funktionieren" RegEx in der 'Ersetzen durch' Box nicht. Eingegebene Zeichen ersetzen den gefundenen Text Buchstabengetreu.


Die vier folgenden Konstruktionen funktionieren jedoch:


  • \t fügt ein Tabulatorzeichen ein, das den gefundenen Text überschreibt.
  • \n fügt eine Absatzmarke ein, die den gefundenen Text überschreibt. Das kann unbeabsichtigt sein, weil \n in der 'Suchen nach' Box 'Zeilenwechsel' bedeutet! In einigen Betriebssystemen kann man Unicode direkt in die 'Ersetzen' Box einfügen und hat damit einen anderen Weg um das Zeilenwechsel Zeichen (U+000A) einzugeben. Das gilt aber nicht überall.
  • $1, $2, usw. sind Rückbezüge (seit Ooo2.4) die gefundene Text-Gruppen einfügen können. Mehr dazu unter Gruppieren (…) und Rückbezüge \x $x. $0 fügt den gesamten gefundenen Text ein.
  • & fügt ebenfalls den gesamten gefundenen Text ein.


"Z.B.:" sucht man nach bird|berry, findet man entweder 'bird' oder 'berry', ersetzt man mit black& erhält man entweder 'blackbird' oder 'blackberry'.


Fehlersuche bei OOo RegEx

Ist man noch nicht mit RegEx vertraut, muss man Beachten dass sie kompliziert sein können – wenn man nicht das erwartete Ergebnis erhält, muss man überprüfen ob man sie ausreichend verstanden hat. Man sollte Versuchen RexEx so einfach und bescheiden wie möglich einzusetzten.


Hier sind weitere interessante Aspekte von OOo RegEx.


  • Findet man ein unerwartetes Verhalten vor, sollte man die betreffende Sektion dieser Anleitung ('HowTo') noch mal betrachten – viele Verhaltensprobleme sind hier dokumentiert.
  • RegEx Ausdrücke sind 'gierig' ('greedy') – d.h. Sie finden so viel Text wie möglich. Daher sollte man geschweifte und eckige Klammern nutzen; Z.B.:' [^ ]{1,5}\> entspricht 1 bis 5 nichtleeren Zeichen am Ende eines Wortes.
  • Besonders Vorsichtig sollte man den "Ersetze alles" Knopf benutzen. Es gibt eine Reihe von sehr seltenen Fällen in denen sehr unerwartete Resultate auftreten. Z.B. Um das erste Zeichen eines jeden Absatzes zu entfernen könnte man nach ^. Suchen und beim 'Ersetzen mit' 'Nichts' eintragen; 'Ersetze alles' wird nun den 'gesamten' Text löschen, anstelle nur des ersten Zeichens jedes Absatzes. Die Fehlermeldung Issue 82473 stellt das datr. Eine Lösung ist 'Suche alle' dann 'Ersetzen'; aber der sicherste Weg ist 'Ersetze alle' in RegEx zu vermeiden.


Tips und Tricks

Hier sind noch einige nützliche Beispiele.

\<([^ ]+)[ ]+\1


findet Wortdoppelungen (duplicate words ) die durch Leerzeichen getrennt sind (Beachte da ist ein Leerzeichen vor jedem ])

\<[:alpha:]*\>

findet jedes Wort im ganzen Dokument (z.B. zum Worte zählen). Beachte: die RegEx Optionsbox muss ausgewählt sein.

\<[1-9][0-9]*\>

findet Dezimalzahlen


\<0[0-7]*\>

Findet Oktalzahlen (Basis 8)


\<0x[A-Fa-f0-9]+\>

findet Hexadezimalzahlen (Basis 16)


[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-z]{2,6}

findet die Mehrzahl von E-Mail Adressen (kein perfekter RegEx – aber eine Praxislösung)




See Also
Personal tools
In other languages