Difference between revisions of "User:Hegen/Test"

From Apache OpenOffice Wiki
Jump to: navigation, search
 
(9 intermediate revisions by 3 users not shown)
Line 3: Line 3:
 
[[nl:Documentation/nl/How_Tos/Reguliere_expressies_in_Writer]]
 
[[nl:Documentation/nl/How_Tos/Reguliere_expressies_in_Writer]]
  
== Introduction ==
+
{{DraftPage|DE}}
  
 
== Einführung ==
 
== Einführung ==
 
In simple terms, regular expressions are a clever way to find & replace text (similar to 'wildcards'). Regular expressions can be both powerful and complex, and it is easy for inexperienced users to make mistakes. We describe the use of OpenOffice.org regular expressions aiming to be clear enough for the novice, while detailing the aspects that can cause confusion to more experienced users.
 
  
 
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.
 
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.
  
A typical use for regular expressions is in finding text in a Writer document; for instance to locate all occurrences of '''man''' or '''woman''' in your document, you could search using a regular expression which would find both words.
 
 
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.
 
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.
  
Regular expressions are very common in some areas of computing, and are often known as regex or regexp. Not all regex are the same - so reading the relevant manual is sensible.
 
 
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.
 
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.
  
== Where regular expressions may be used in OOo ==
 
 
== Wo Reguläre Ausdrücke im OOo genutzt werden ==
 
== Wo Reguläre Ausdrücke im OOo genutzt werden ==
In Writer:
 
 
Im Writer-Modul:
 
Im Writer-Modul:
  
*Edit - Find & Replace dialog
 
 
*Bearbeiten – Suchen & Ersetzen  
 
*Bearbeiten – Suchen & Ersetzen  
  
*Edit - Changes - Accept/reject command (Filter tab)
 
 
*Bearbeiten – Änderungen – Akzeptieren oder Verwerfen (Tabulator Filter)
 
*Bearbeiten – Änderungen – Akzeptieren oder Verwerfen (Tabulator Filter)
  
In Calc:
 
 
Im Calc-Modul:
 
Im Calc-Modul:
  
*Edit - Find & Replace dialog
 
 
*Bearbeiten – Suchen & Ersetzen  
 
*Bearbeiten – Suchen & Ersetzen  
  
*Data - Filter - Standard filter & Advanced filter
 
 
*Daten – Filter – Standardfilter & Spezialfilter
 
*Daten – Filter – Standardfilter & Spezialfilter
  
*Certain functions, such as SUMIF, LOOKUP
 
 
*in einigen Funktionen, y.B. SUMWENN (sumif), SVERWEIS (lookup)
 
*in einigen Funktionen, y.B. SUMWENN (sumif), SVERWEIS (lookup)
  
 
In Base:
 
In Base:
  
*Find Record command
 
 
*Suche Datensatz
 
*Suche Datensatz
 
The dialogs that appear when you use the above commands generally have an option to use regular expressions (which is off by default). For example
 
  
 
Die Dialoge beim Aufruf dieser Funktionen haben immer eine Option RegEx zu nutzen (ist aber als Standardwert ausgeschaltet). Zu Beispiel:
 
Die Dialoge beim Aufruf dieser Funktionen haben immer eine Option RegEx zu nutzen (ist aber als Standardwert ausgeschaltet). Zu Beispiel:
  
 
<center>[[Image:Regex_howto_1.png|location of regular expression tick box]]</center>
 
<center>[[Image:Regex_howto_1.png|location of regular expression tick box]]</center>
 
 
<center>[[Bild:Regex_howto_1.png|Position des Auwahlschalters für Reguläre Ausdrücke]]</center>
 
<center>[[Bild:Regex_howto_1.png|Position des Auwahlschalters für Reguläre Ausdrücke]]</center>
  
You should check the status of the regular expression option each time you bring up the dialog, as it defaults to 'off'.
 
 
Man sollte den Status dieser Option jedes mal beim Aufruf des Dialogs kontrollieren, da er standardmäßig ausgeschaltet ist.
 
Man sollte den Status dieser Option jedes mal beim Aufruf des Dialogs kontrollieren, da er standardmäßig ausgeschaltet ist.
 
   
 
   
== A simple example ==
 
 
== Ein einfaches Beispiel ==
 
== Ein einfaches Beispiel ==
  
If you have little or no experience of regular expressions, you may find it easiest to study them in Writer rather than say Calc.
 
 
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.
 
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.
  
In Writer, bring up the '''Find and Replace''' dialog from the Edit menu.
+
Im Writer rufen wir den „Suchen & Ersetzen“ Dialog aus dem Bearbeiten Menü auf.
Im Writer rufen wir den „Suchen & Ersetzen“ Dialog aus dem Bearbeiten Menue auf.
+
  
On the dialog, choose '''More Options''' and tick the '''Regular Expressions''' box
 
 
Im Dialog, wählen wir „Mehr Optionen“ und klicken die „Regulären Ausdrücke“-Box an.
 
Im Dialog, wählen wir „Mehr Optionen“ und klicken die „Regulären Ausdrücke“-Box an.
  
In the Search box enter '''r.d '''- the dot here means 'any single character'.
 
 
In die Suchbox tragen wir „r.d“ ein – der Punkt bedeutet hier 'jedes einzelne Zeichen'.
 
In die Suchbox tragen wir „r.d“ ein – der Punkt bedeutet hier 'jedes einzelne Zeichen'.
  
Clicking the Find All button will now find all the places where an '''r''' is followed by another character followed by a '''d''', for instance ''''red'''' or 'hot<b>rod</b>' or 'b'''rid'''e' or 'you'''r d'''og' (this last example is '''r''' followed by a '''space''' followed by '''d''' - the space is a character).
 
 
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 'hot<b>rod</b>' oder 'b'''rid'''e' oder 'you'''r d'''og' (im letzten Beispiel wird '''r''' gefolgt von einem '''Leerzeichen''' (space) gefolgt von einem '''d''' gefunden – der Abstand (Leerzeichen) ist ein 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 'hot<b>rod</b>' oder 'b'''rid'''e' oder 'you'''r d'''og' (im letzten Beispiel wird '''r''' gefolgt von einem '''Leerzeichen''' (space) gefolgt von einem '''d''' gefunden – der Abstand (Leerzeichen) ist ein Zeichen).
  
If you type''' xxx''' into the '''Replace with''' box, and click the '''Replace All''' button, these become '<b>xxx</b>', 'hot<b>xxx</b>', 'b'''xxx'''e', 'you'''xxx'''og'
 
 
Gibt man '''xxx''' in die '''Ersetzen mit''' Box ein, und betätigt man den '''Ersetzen alles''' Knopf, so bekommt man '<b>xxx</b>', 'hot<b>xxx</b>', 'b'''xxx'''e', 'you'''xxx'''og' .
 
Gibt man '''xxx''' in die '''Ersetzen mit''' Box ein, und betätigt man den '''Ersetzen alles''' Knopf, so bekommt man '<b>xxx</b>', 'hot<b>xxx</b>', 'b'''xxx'''e', 'you'''xxx'''og' .
  
That may not be very useful, but it shows the principle. We'll continue to use the '''Find and Replace''' dialog to explain in more detail.
 
 
Das mag nicht sehr sinnvoll erscheinen, aber es demonstriert das Prinzip. Wir werden den '''Suchen und Ersetzen''' Dialog im Weiteren genauer erklären.
 
Das mag nicht sehr sinnvoll erscheinen, aber es demonstriert das Prinzip. Wir werden den '''Suchen und Ersetzen''' Dialog im Weiteren genauer erklären.
  
== The least you need to know about regular expressions ==
 
 
== Das Mindeste was sie über Reguläre Ausdrücke wissen müssen==
 
== Das Mindeste was sie über Reguläre Ausdrücke wissen müssen==
  
If you don't want to find out exactly how regular expressions work, but just want to get a job done, you might find these common examples useful. Enter them in the 'Search for' box, and make sure that regular expressions are selected.
 
 
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.
 
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.
 
* <b>color|colour</b> finds <b>color</b> and <b>colour</b>
 
* <b>sep.rate</b> finds <b>sep</b> then any character then <b>rate</b> - eg <b>separate</b>, <b>seperate</b>, and indeed <b>sepXrate</b>
 
* <b>sep[ae]rate</b> finds <b>separate</b> and <b>seperate</b> - <b>[ae]</b> means either an <b>a</b> or an <b>e</b>
 
* <b>changed?</b> finds <b>change</b> and <b>changed</b> - the <b>d</b> is optional because it is followed by a question mark
 
* <b>s\></b> finds the <b>s</b> at the end of a word
 
* <b>\<.</b> finds the first letter of a word.
 
* <b>^.</b> finds the first letter of a paragraph.
 
* <b>^$</b> finds an empty paragraph
 
  
 
* <b>color|colour</b>findet <b>color</b> und <b>colour</b> (beide Wörter richtig)
 
* <b>color|colour</b>findet <b>color</b> und <b>colour</b> (beide Wörter richtig)
Line 104: Line 68:
 
* <b>^$</b> findet einen leeren Absatz
 
* <b>^$</b> findet einen leeren Absatz
  
== How regular expressions are applied in OpenOffice.org ==
 
 
== Wie Reguläre Ausdrücke in OOo angewendet werden==
 
== Wie Reguläre Ausdrücke in OOo angewendet werden==
  
OpenOffice.org regular expressions appear to divide the text to be searched into portions and examine each portion separately.
 
 
OOo RegEx scheinen den zu durchsuchenden Text in Portionen aufzuteilen und jede einzelne Portion separat zu Untersuchen.
 
OOo RegEx scheinen den zu durchsuchenden Text in Portionen aufzuteilen und jede einzelne Portion separat zu Untersuchen.
  
In Writer, text appears to be divided into paragraphs. For example ''' x.*z''' will not match '''x''' at the end of a paragraph with '''z''' beginning the next paragraph (''' x.*z''' means '''x''' then any or no characters then '''z'''). Paragraphs seem to be treated separately (although we discuss some special cases at the end of this HowTo).
 
 
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).
 
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).
  
 
<center>[[Image:Regex_howto_3.png|the scope of regular expressions]]</center>
 
<center>[[Image:Regex_howto_3.png|the scope of regular expressions]]</center>
<center>[[Bild:Regex_howto_3.png|the scope of regular expressions]]</center>
+
<center>[[Bild:Regex_howto_3.png|Die Reichweite Regulärer Ausdrücke]]</center>
  
In addition Writer considers each table cell and each text frame separately. Text frames are examined after all the other text / table cells on all pages have been examined.
 
 
Zusätzlich betrachtet Writer jede Tabellenzelle und jedes Frame separat. Text Frames (Textrahmen) werden nach allen anderen Text oder Tabellenzellen untersucht.
 
Zusätzlich betrachtet Writer jede Tabellenzelle und jedes Frame separat. Text Frames (Textrahmen) werden nach allen anderen Text oder Tabellenzellen untersucht.
  
In the Find & Replace dialog, regular expressions may be used in the <b>Search for</b> box. In general they may <b>not</b> be used in the <b>Replace</b> with box. The exceptions are discussed later.
 
 
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.
 
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.
  
== Literal characters ==
 
 
== Buchstaben/Literale==
 
== Buchstaben/Literale==
  
If your regular expression contains characters other than the so-called 'special characters' '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>''' then those characters are matched literally.
 
 
Wenn im RegEx Zeichen enthalten sind die keine sogenannten 'Sonderzeichen' '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>''' sind, so werden sie als Buchstaben (bzw. Literale) bezeichnet.
 
Wenn im RegEx Zeichen enthalten sind die keine sogenannten 'Sonderzeichen' '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>''' sind, so werden sie als Buchstaben (bzw. Literale) bezeichnet.
  
''For example:'' '''red''' matches '''red''' '''red'''raw and F'''red'''die.
 
 
''Zum Beispiel:'' '''red''' entspricht '''red''' '''red'''raw und F'''red'''die.
 
''Zum Beispiel:'' '''red''' entspricht '''red''' '''red'''raw und F'''red'''die.
  
OpenOffice.org allows you to choose whether you care if a character is 'UPPER CASE' or 'lower case'. If you tick the box to 'match case' on the '''Find and Replace''' dialog, then '''red''' will not match '''Red''' or F'''RED'''<nowiki>; if you un-tick that box then the case is ignored and both will be matched.</nowiki>
 
 
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.
 
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.
  
  
== Special characters ==
 
 
== Sonderzeichen ==
 
== Sonderzeichen ==
  
The special characters are '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>'''
 
 
Die Sonderzeichen sind '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>'''
 
Die Sonderzeichen sind '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>'''
  
They have special meanings in a regular expression, as we're about to describe.
 
 
Sie haben besondere Bedeutungen in RegEx, die wir beschreiben werden.
 
Sie haben besondere Bedeutungen in RegEx, die wir beschreiben werden.
  
If you wish to match one of these characters literally, place a backslash ''''<nowiki>\</nowiki>'''' before it.
 
 
Braucht man eines dieser Zeichen in seiner eigenen Zeichenfunktion, wird ein Backslash ''''<nowiki>\</nowiki>'''' (umgedrehter Schrägstrich) vor das Zeichen gesetzt.  
 
Braucht man eines dieser Zeichen in seiner eigenen Zeichenfunktion, wird ein Backslash ''''<nowiki>\</nowiki>'''' (umgedrehter Schrägstrich) vor das Zeichen gesetzt.  
  
''For example:'' to match '''$100''' use '''\$100''' - the '''\$''' is taken to mean '''$''' .
 
 
''Zum Beispiel:'' für die Suche nach '''$100''' nutzt man '''\$100''' – das '''\$''' nimmt man für '''$''' .
 
''Zum Beispiel:'' für die Suche nach '''$100''' nutzt man '''\$100''' – das '''\$''' nimmt man für '''$''' .
  
== Single character match .  ? ==
 
 
== Einzelzeichensuche mit . oder ? ==
 
== Einzelzeichensuche mit . oder ? ==
  
The dot '<b>.</b>' special character stands for any single character (except newline).
 
 
Das Punkt <b>.</b>' Sonderzeichen steht für jedes einzelne Zeichen (außer Zeilenvorschub).
 
Das Punkt <b>.</b>' Sonderzeichen steht für jedes einzelne Zeichen (außer Zeilenvorschub).
  
 
''For example:'' '''r.d''' matches '<b>red</b>' and 'hot<b>rod</b>' and 'b<b>rid</b>e' and 'you<b>r d</b>og'
 
 
''Zum Beispiel:'' '''r.d''' entspricht '<b>red</b>' und 'hot<b>rod</b>' und 'b<b>rid</b>e' und 'you<b>r d</b>og'  
 
''Zum Beispiel:'' '''r.d''' entspricht '<b>red</b>' und 'hot<b>rod</b>' und 'b<b>rid</b>e' und 'you<b>r d</b>og'  
  
The question mark '<b>?</b>' special character means 'match zero or one of the preceding character' - or 'match the preceding character if it is found'.
 
Das Fragezeichen '<b>?</b>' steht für 'keines oder genau dem Zeichen dem es folgt' bzw. 'zeige  das vorangegangene Zeichen wenn es vorhanden ist'.
 
  
 +
Das Fragezeichen '<b>?</b>' steht für 'keines oder genau dem Zeichen dem es folgt' bzw. 'zeige  das vorangegangene Zeichen wenn es vorhanden ist'.
  
''For example:'' '''rea?d''' matches '<b>red</b>' and '<b>read</b>' - '<b>a?</b>' means 'match a single a if there is one'.
 
 
''Zum Beispiel:'' '''rea?d''' entspricht '<b>red</b>' und '<b>read</b>' - '<b>a?</b>' heißt 'etspreche einem einzelnen Zeichen a soweit eins vorhanden ist'.
 
''Zum Beispiel:'' '''rea?d''' entspricht '<b>red</b>' und '<b>read</b>' - '<b>a?</b>' heißt 'etspreche einem einzelnen Zeichen a soweit eins vorhanden ist'.
  
  
Special characters can be used in combination with each other. A dot followed by a question mark means 'match zero or one of any single chacter'.
 
 
Sonderzeichen können in Kombination miteinander angewendet werden. Ein Punkt mit einem folgenden Fragezeichen heißt 'Vorkommen eines einzelnen Zeichens soweit eins da 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'.
  
 
''For example:'' '''star.?ing''' matches '<b>staring</b>', '<b>starring</b>', '<b>starting</b>', and '<b>starling</b>', but not '<b>startling</b>'
 
 
''Zum Beispiel:'' '''star.?ing''' entspricht '<b>staring</b>', '<b>starring</b>', '<b>starting</b>', und '<b>starling</b>', aber nicht '<b>startling</b>'
 
''Zum Beispiel:'' '''star.?ing''' entspricht '<b>staring</b>', '<b>starring</b>', '<b>starting</b>', und '<b>starling</b>', aber nicht '<b>startling</b>'
  
== Repeating match +  *  {m,n} ==
+
 
 
== Wiederholtes Finden mit + * {m,n} ==
 
== Wiederholtes Finden mit + * {m,n} ==
  
The plus <b>'+'</b> special character means 'match one or more of the preceding character'.
 
 
Das Sonderzeichen Plus <b>'+'</b> bedeutet 'Vorkommen eines oder mehrerer der vorangestellten Zeichens'.
 
Das Sonderzeichen Plus <b>'+'</b> bedeutet 'Vorkommen eines oder mehrerer der vorangestellten Zeichens'.
  
''For example:'' <b>re+d</b> matches <b>'red'</b> and <b>'reed'</b> and <b>'reeeeed'</b> - <b>e+</b> means match one or more <b>e</b>'s.
 
 
''Zum Beispiel:'' <b>re+d</b> entspricht <b>'red'</b> und <b>'reed'</b> und <b>'reeeeed'</b> - <b>e+</b> heißt ein oder mehrere  <b>e</b>'s.
 
''Zum Beispiel:'' <b>re+d</b> entspricht <b>'red'</b> und <b>'reed'</b> und <b>'reeeeed'</b> - <b>e+</b> heißt ein oder mehrere  <b>e</b>'s.
  
The star <b>'<nowiki>*</nowiki>'</b> special character means 'match zero or more of the preceding character'.
 
Das Sonderzeichen Stern <b>'<nowiki>*</nowiki>'</b> heißt 'entspreche keinem oder mehreren des vorangegangenen Zeichens'.
 
  
 +
Das Sonderzeichen Stern <b>'<nowiki>*</nowiki>'</b> heißt 'entspreche keinem oder mehreren des vorangegangenen Zeichens'.
  
''For example:'' <b>rea*d</b> matches <b>'red'</b> and <b>'read'</b> and <b>'reaaaaaaad'</b> - <b>'a*'</b> means match zero or more <b>a</b>'s .
 
 
''Zum Beispiel:'' <b>rea*d</b> entspricht <b>'red'</b> und <b>'read'</b> und <b>'reaaaaaaad'</b> - <b>'a*'</b> bedeutet kein oder mehrmaliges Vorkommen von <b>a</b>'s .
 
''Zum Beispiel:'' <b>rea*d</b> entspricht <b>'red'</b> und <b>'read'</b> und <b>'reaaaaaaad'</b> - <b>'a*'</b> bedeutet kein oder mehrmaliges Vorkommen von <b>a</b>'s .
  
A common use for <b>'<nowiki>*</nowiki>'</b> is after the dot character - ie <b>'<nowiki>.*</nowiki>'</b> which means 'any or no characters'.
 
Eine übliche verwendung für <b>'<nowiki>*</nowiki>'</b>  ist nach dem Punkt-Zeichen – d.h. <b>'<nowiki>.*</nowiki>'</b> bedeutet 'jedes oder kein Zeichen'.
 
  
''For example:'' <b>rea.*d</b> matches <b>'read'</b> and <b>'reaXd'</b> and <b>'reaYYYYd'</b> but not - <b>'red'</b> or <b>'reXd'</b>
+
Eine übliche Verwendung für <b>'<nowiki>*</nowiki>'</b> ist nach dem Punkt-Zeichen – d.h. <b>'<nowiki>.*</nowiki>'</b> bedeutet 'jedes oder kein Zeichen'.
 +
 
 
''Zum Beispiel:'' <b>rea.*d</b> entspricht <b>'read'</b> und <b>'reaXd'</b> und <b>'reaYYYYd'</b> aber nicht - <b>'red'</b> oder <b>'reXd'</b>
 
''Zum Beispiel:'' <b>rea.*d</b> entspricht <b>'read'</b> und <b>'reaXd'</b> und <b>'reaYYYYd'</b> aber nicht - <b>'red'</b> oder <b>'reXd'</b>
  
Use the star <b>'<nowiki>*</nowiki>'</b> with caution; it will grab everything it can:
+
 
 
Benutze den Stern <b>'<nowiki>*</nowiki>'</b> mit Vorsicht, es findet (und verwendet) alles was möglich ist.
 
Benutze den Stern <b>'<nowiki>*</nowiki>'</b> mit Vorsicht, es findet (und verwendet) alles was möglich ist.
  
''For example:'' <b>'r.*d'</b> matches <b>'red'</b> but in Writer if your paragraph is actually 'The referee showed him the red card again' the match found is <b>'referee showed him the red card'</b> - that is, the first <b>'r'</b> and the last possible <b>'d'</b>. Regular expressions are greedy by nature.
 
 
''Zum Beispiel:'' <b>'r.*d'</b> findet <b>'red'</b> aber wenn der Absatz im Writer 'The referee showed him the red card again' umfasst, ist das Gefundene <b>'referee showed him the red card'</b> - d.h. Das erste <b>'r'</b> und das letzt mögliche <b>'d'</b>. Reguläre Ausdrücke sind ihrer Natur nach gierig.
 
''Zum Beispiel:'' <b>'r.*d'</b> findet <b>'red'</b> aber wenn der Absatz im Writer 'The referee showed him the red card again' umfasst, ist das Gefundene <b>'referee showed him the red card'</b> - d.h. Das erste <b>'r'</b> und das letzt mögliche <b>'d'</b>. Reguläre Ausdrücke sind ihrer Natur nach gierig.
  
--- S.6
 
  
You may specify how many times you wish the match to be repeated, with curly brackets <b>{ }</b>. For example <b>a{1,4}rgh!</b> will match <b>argh!</b>, <b>aargh!</b>, <b>aaargh!</b> and <b>aaaargh!</b> - in other words between 1 and 4 <b>a</b>'s then <b>rgh!</b>.
 
 
Man kann mit geschweiften Klammern <b>{ }</b> angeben wie oft der Treffer wiederholt werden soll. Z.B. <b>a{1,4}rgh!</b> wird <b>argh!</b>, <b>aargh!</b>, <b>aaargh!</b> und <b>aaaargh!</b> finden – mit anderen Worten gesagt zwischen 1 und 4 <b>a</b>'s gefolgt von  <b>rgh!</b>
 
Man kann mit geschweiften Klammern <b>{ }</b> angeben wie oft der Treffer wiederholt werden soll. Z.B. <b>a{1,4}rgh!</b> wird <b>argh!</b>, <b>aargh!</b>, <b>aaargh!</b> und <b>aaaargh!</b> finden – mit anderen Worten gesagt zwischen 1 und 4 <b>a</b>'s gefolgt von  <b>rgh!</b>
  
Also note that <b>a{3}rgh!</b> will match precisely 3 <b>a</b>'s, ie <b>aaargh!</b>, and  <b>a{2,}rgh!</b> (with a comma) will match at least 2 <b>a</b>'s, for example <b>aargh!</b> and <b>aaaaaaaargh!</b>.
+
 
 
Beachte auch das <b>a{3}rgh!</b> genau  3 <b>a</b>'s finden, d.h. <b>aaargh!</b>, und  <b>a{2,}rgh!</b> (mit einem Komma) entsprechen mindestens 2 <b>a</b>'s, z.B- <b>aargh!</b> und <b>aaaaaaaargh!</b>.
 
Beachte auch das <b>a{3}rgh!</b> genau  3 <b>a</b>'s finden, d.h. <b>aaargh!</b>, und  <b>a{2,}rgh!</b> (mit einem Komma) entsprechen mindestens 2 <b>a</b>'s, z.B- <b>aargh!</b> und <b>aaaaaaaargh!</b>.
  
== Positional match ^  $  \<  \> ==
+
 
 
== Positionssuche ^  $  \<  \> ==
 
== Positionssuche ^  $  \<  \> ==
  
The circumflex <b>'^'</b> special character means 'match at the beginning of the text'.
 
 
Das Zirkumflex (oder auch Dach-)Sonderzeichen <b>'^'</b> bedeutet 'Finden am Textanfang'.
 
Das Zirkumflex (oder auch Dach-)Sonderzeichen <b>'^'</b> bedeutet 'Finden am Textanfang'.
  
The dollar <b>'$'</b> special character means 'match at the end of the text'.
 
 
Das Dollar-Zeichen <b>'$'</b>bedeutet 'Finden am Ende des Textes'.
 
Das Dollar-Zeichen <b>'$'</b>bedeutet 'Finden am Ende des Textes'.
  
  
Remember that OpenOffice.org regular expressions divide up the text to be searched - each paragraph in Writer is examined separately.
+
Man erinnere sich, dass OOo RegEx den untersuchten Text unterteilt – jeder Absatz wird gesondert betrachtet.
Man erinnere sich, dass OOo RegEx den untersuchten Text unterteilt – jeder Absatz wird gesonders betrachtet.
+
  
 +
"Zum Beispiel:" <b>^red</b> entspricht <b>'red'</b> am Anfang des Absatzes (<b>red</b> night shepherd's delight).
  
''For example:'' <b>^red</b> matches <b>'red'</b> at the start of a paragraph (<b>red</b> night shepherd's delight).
+
"Zum Beispiel:" <b>red$</b> entspricht <b>'red'</b> am Ende des Absatzes (he felt himself go <b>red</b>).
„Z.B.:“ <b>^red</b> entspricht <b>'red'</b> am Anfang des Absatzes (<b>red</b> night shepherd's delight).
+
  
''For example:'' <b>red$</b> matches <b>'red'</b> at the end of a paragraph (he felt himself go <b>red</b>)
+
"Zum Beispiel:"<b>^red$</b> entspricht dem Inhalt einer Zelle die nur <b>'red'</b> enthält.
„Z.B.:“ <b>red$</b> entspricht <b>'red'</b> am Ende des Absatzes (he felt himself go <b>red</b>).
+
  
''For example:'' <b>^red$</b> matches inside a table cell that contains just <b>'red'</b>
 
„Z.B.:“<b>^red$</b> entspricht dem Inhalt einer Zelle die nur <b>'red'</b> enthält.
 
  
In addition a hard line break (entered by Shift-Enter) is considered the beginning / end of text, and will allow a <b>^</b> or <b>$</b> match.
+
Zusätzlich dazu wird ein 'harter Zeilenwechsel' (durch Umschalt-Enter eingegeben) als Anfang oder Ende eines Textes angesehen und durch <b>^</b> oder <b>$</b> gefunden.
Zusätzlich dazu wird ein Harter Zeilenwechsel (durch Umschalt-Enter eingegeben) als Anfang oder Ende eines Textes angesehen und durch <b>^</b> oder <b>$</b> gefunden.
+
  
The backslash <b>'\'</b> special character gives special meaning to the character pairs <b>'\<'</b> and <b>'\>'</b>, namely 'match at the beginning of a word', and 'match at the end of a word'
 
Das Backslash-Zeichen <b>'\'</b> hat in Kombinationen von <b>'\<'</b> und <b>'\>'</b> besondere Funktionen, insbesondere 'Finde am Wortanfang' und 'Finde am Wortende'.
 
  
 +
Das Backslash-Zeichen <b>'\'</b> hat in Kombinationen von <b>'\<'</b> und <b>'\>'</b> besondere Funktionen, insbesondere 'Finde am Wortanfang' und 'Finde am Wortende'.
  
''For example:'' <b><nowiki>\<red</nowiki></b> matches red at the beginning of a word (she went <b>red</b>der than he did).
+
"Zum Beispiel:"<b><nowiki>\<red</nowiki></b> entspricht red am Wortanfang (she went <b>red</b>der than he did).
„Z.B.:“<b><nowiki>\<red</nowiki></b> entspricht red am Wortanfang (she went <b>red</b>der than he did).
+
  
''For example:'' <b><nowiki>red\></nowiki></b> matches red at the end of a word (although neither of them ca<b>red</b> much.)
+
"Zum Beispiel:"<b><nowiki>red\></nowiki></b> entspricht red am Wortende (although neither of them ca<b>red</b> much.)
„Z.B.:“<b><nowiki>red\></nowiki></b> entspricht red am Wortende (although neither of them ca<b>red</b> much.)
+
  
  
The test used to define the beginning/end of a word seems to be that the previous/next character is a space, underscore (_), tab, newline, paragraph mark or any non-alphanumeric character.
 
 
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.
 
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:"<b><nowiki>\<red</nowiki></b> entspricht 'person@<b>red</b>iton.com'
  
''For example:'' <b><nowiki>\<red</nowiki></b> matches 'person@<b>red</b>iton.com'
+
"Zum Beispiel:"<b><nowiki>red\></nowiki></b> entspricht 'I said, "No-one da<b>red</b>" '
„Z.B.:“<b><nowiki>\<red</nowiki></b> entspricht 'person@<b>red</b>iton.com'
+
  
''For example:'' <b><nowiki>red\></nowiki></b> matches 'I said, "No-one da<b>red</b>" '
 
„Z.B.:“<b><nowiki>red\></nowiki></b> entspricht 'I said, "No-one da<b>red</b>" '
 
  
== Alternative matches  |  [...]  ==
 
 
== Alternatives Vorkommen  |  [...]  ==
 
== Alternatives Vorkommen  |  [...]  ==
  
The pipe character '<b>|</b>' is a special character which allows the expression either side of the '<b>|</b>' to match.
 
 
Das Pipe-Zeichen (senkrechter Strich) '<b>|</b>' ist ein Sonderzeichen das den Ausdruck auf der einen oder anderen Seite vom '<b>|</b>' als Treffer erkennt.
 
Das Pipe-Zeichen (senkrechter Strich) '<b>|</b>' ist ein Sonderzeichen das den Ausdruck auf der einen oder anderen Seite vom '<b>|</b>' als Treffer erkennt.
  
 +
"Zum Beispiel:"<b>red|blue</b> entspricht <b>'red'</b> und <b>'blue'</b>
  
''For example:'' <b>red|blue</b> matches <b>'red'</b> and <b>'blue'</b>
 
„Z.B.:“<b>red|blue</b> entspricht <b>'red'</b> und <b>'blue'</b>
 
  
Unfortunately, certain expressions when used ''after'' a pipe are not evaluated. This is so far known to affect '''^''' and backreferences, and is the subject of [http://qa.openoffice.org/issues/show_bug.cgi?id=46165 issue 46165]
 
 
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 [http://qa.openoffice.org/issues/show_bug.cgi?id=46165 issue 46165]
 
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 [http://qa.openoffice.org/issues/show_bug.cgi?id=46165 issue 46165]
  
 +
"Zum Beispiel:"<b>^red|blue</b> entspricht Absätzen beginnend mit <b>'red'</b> und jedes Vorkommen von <b>'blue'</b>, aber <b>blue|^red</b> entspricht unkorrekterweise nur jedem Vorkommen von <b>'blue'</b>, und findet Absätze die mit <b>'red'</b> beginnen nicht.
  
''For example:'' <b>^red|blue</b> matches paragraphs beginning with <b>'red'</b> and any occurrence of <b>'blue'</b>, but <b>blue|^red</b> incorrectly matches only any occurrence of <b>'blue'</b>, failing to match paragraphs beginning with <b>'red'</b>
 
„Z.B.:“<b>^red|blue</b> entspricht Absätzen beginnend mit <b>'red'</b> und jedes Vorkommen von <b>'blue'</b>, aber <b>blue|^red</b> entspricht unkorrekterweise nur jedem Vorkommen von <b>'blue'</b>, und findet Absätze die mit <b>'red'</b> beginnen nicht.
 
  
 
The open square brackets character <b>[</b> is a special character. Characters enclosed in square brackets are treated as alternatives - any one of them may match. You can also include ranges of characters, such as '''a-z''' or '''0-9''', rather than typing in '''abcdefghijklmnopqrstuvwxyz''' or '''0123456789'''
 
 
Die eckigen Klammern <b>[</b> 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.
 
Die eckigen Klammern <b>[</b> 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:"'''<nowiki>r[eo]d </nowiki>''' entspricht ''' 'red' '''und''' 'rod'''' aber nicht ''''rid''''
  
''For example:'' '''<nowiki>r[eo]d </nowiki>'''matches''' 'red' '''and''' 'rod'''' but not ''''rid''''
+
"Zum Beispiel:"'''<nowiki>[m-p]ut</nowiki>''' entspricht ''''mut'''' und ''''nut'''' und ''''out'''' und ''''put''''
„Z.B.:“'''<nowiki>r[eo]d </nowiki>''' entspricht ''' 'red' '''und''' 'rod'''' aber nicht ''''rid''''
+
 
+
''For example: '''''<nowiki>[m-p]ut</nowiki>''' matches ''''mut'''' and ''''nut'''' and ''''out'''' and ''''put''''
+
„Z.B.:“'''<nowiki>[m-p]ut</nowiki>''' entspricht ''''mut'''' und ''''nut'''' und ''''out'''' und ''''put''''
+
  
''For example: '''''<nowiki>[hm-p]ut</nowiki>''' matches ''''hut'''' and ''''mut'''' and ''''nut'''' and ''''out'''' and ''''put''''
+
"Zum Beispiel:"'''<nowiki>[hm-p]ut</nowiki>''' entspricht ''''hut'''' und ''''mut'''' und ''''nut'''' und ''''out'''' und ''''put''''
„Z.B.:“'''<nowiki>[hm-p]ut</nowiki>''' entspricht ''''hut'''' und ''''mut'''' und ''''nut'''' und ''''out'''' und ''''put''''
+
  
  
Special characters within alternative match square brackets do not have the same special meanings. The only characters which do have special meanings are <b>]</b>, <b>-</b>, <b>^</b> and <b><nowiki>\</nowiki></b>, and the meanings are:
 
 
Sonderzeichen in eckige Klammern eingeschlossen haben nicht die entsprechenden abweichenden Bedeutungen. Die einzigen Zeichen mit besonderer Bedeutung sind <b>]</b>, <b>-</b>, <b>^</b> and <b><nowiki>\</nowiki></b>. Deren Bedeutung ist dann:
 
Sonderzeichen in eckige Klammern eingeschlossen haben nicht die entsprechenden abweichenden Bedeutungen. Die einzigen Zeichen mit besonderer Bedeutung sind <b>]</b>, <b>-</b>, <b>^</b> and <b><nowiki>\</nowiki></b>. Deren Bedeutung ist dann:
  
* <b>]</b> - a closing square bracket ends the alternative match set <b><nowiki>[abcdef]</nowiki></b>
 
 
* <b>]</b> - die schließende eckige Klammer beendet die alternative Zeichenmenge <b><nowiki>[abcdef]</nowiki></b>
 
* <b>]</b> - die schließende eckige Klammer beendet die alternative Zeichenmenge <b><nowiki>[abcdef]</nowiki></b>
  
 +
* <b>^</b> - Ist das Karet (Dach) das erste Zeichen zwischen den eckigen Klammern negiert es die Suche. "Zum Beispiel:" <b><nowiki>[^a-dxyz]</nowiki></b> entspricht allen Zeichen außer <b>abcdxyz</b>.
  
* <b>^</b> - if the caret is the first character in the square brackets, it negates the search. ''For example'' <b><nowiki>[^a-dxyz]</nowiki></b> matches any character except <b>abcdxyz</b>.
+
* <b><nowiki>\</nowiki></b> - der Backslash erlaubt den Sonderzeichen <b>]</b>, <b>-</b>, <b>^</b> und <b><nowiki>\</nowiki></b> in ihrer eigentlichen Form genutzt zu werden, oder hexadezimale Codes einzugeben.
* <b>^</b> - Ist das Karet (Dach) das erste Zeichen zwischen den eckigen Klammern negiert es die Suche. „Z.B.:“ <b><nowiki>[^a-dxyz]</nowiki></b> entspricht allen Zeichen außer <b>abcdxyz</b>.
+
  
* <b><nowiki>\</nowiki></b> - the backslash is used to allow <b>]</b>, <b>-</b>, <b>^</b> and <b><nowiki>\</nowiki></b> to be used literally in square brackets, and to allow hexadecimal codes.
+
"Zum Beispiel:"<b>\]</b> steht für eine Zeichenkette mit einer schließenden eckigen Klammer, wie <b>[[\]a]</b> für eine öffnende eckige Klammer <b>[</b>, eine schließende eckige Klammer <b>]</b> oder ein <b>a</b> steht. <b>\x0009</b> steht für ein Tabulator-Zeichen.
* <b><nowiki>\</nowiki></b> - der Backslash erlaubt den Sonderzeichen <b>]</b>, <b>-</b>, <b>^</b> and <b><nowiki>\</nowiki></b> in ihrer eigentlichen Form genutzt zu werden, oder hexadezimale Codes einzugeben.
+
  
''For example'', <b>\]</b> stands for a literal closing square bracket, so <b>[[\]a]</b> will match an opening square bracket <b>[</b>, a closing square bracket <b>]</b> or an <b>a</b>. <b>\\</b> stands for a literal backslash. <b>\x0009</b> stands for a tab character.
 
„Z.B.:“<b>\]</b> steht für eine Zeichenkette mit einer schließenden eckigen Klammer, wie <b>[[\]a]</b> für eine öffnende eckige Klammer <b>[</b>, eine schließende eckige Klammer <b>]</b> oder ein <b>a</b> steht. <b>\x0009</b> steht für ein Tabulator-Zeichen.
 
  
Just to re-emphasise: these are the meanings of these characters inside square brackets, and any other characters are treated literally. ''For example'' <b>[\t ]</b> will match a '<b>t</b>' or a space - <b>not</b> a tab or a space. Use <b>[\x0009 ]</b> to match a tab or a space.
+
Noch mal zur Wiederholung: das sind die Bedeutungen dieser Zeichen innerhalb von eckigen Klammern, viele andere Zeichen werden direkt gefunden.  
Noch mal zur Rekapitulation: das sind die Bedeutungen dieser Zeichen innerhalb von eckigen Klammern, viele andere Zeichen werden direkt gefunden.
+
„Z.B.:“<b>[\t ]</b> entspricht '<b>t</b>' oder einem Leerzeichen - <b>nicht</b> einem Tabulator oder einem Leerzeichen. Für einen Tabulator oder Leerzeichen nutzt man <b>[\x0009 ]</b>.
+
  
--- S.7
+
"Zum Beispiel:"<b>[\t ]</b> entspricht '<b>t</b>' oder einem Leerzeichen - <b>nicht</b> einem Tabulator oder einem Leerzeichen. Für einen Tabulator oder Leerzeichen nutzt man <b>[\x0009 ]</b>.
== POSIX bracket expressions [:alpha:] [:digit:] etc..  ==
+
There is much confusion in the OpenOffice.org community about these. The Help itself is also far from clear.
+
  
There are a number of 'POSIX bracket expressions' (sometimes called 'POSIX character classes') available in OpenOffice.org regular expressions, of the form <b>[:classname:]</b> which allow a match with any of the characters in that class. For instance <b><nowiki>[:digit:]</nowiki></b> stands for any of the digits <b>0123456789</b>.
 
  
These (by definition) may <b>only appear inside the square brackets</b> of an alternative match - so a valid syntax would be <b><nowiki>[abc[:digit:]]</nowiki></b>, which should match '''a''', '''b''', '''c''', or any digit '''0-9'''. A correct syntax to match just any one digit would be <b><nowiki>[[:digit:]]</nowiki></b>.
+
== POSIX Klammerausdrücke [:alpha:] [:digit:] usw. ==
  
Unfortunately this does not work as it should! The correct syntax does not work at all, but currently an incorrect syntax <b><nowiki>([:digit:])</nowiki></b> will actually match a digit, as long as it is <b>outside</b> the  square brackets of an alternative match. (''Obviously this is unsatisfactory, and is the subject of [http://qa.openoffice.org/issues/show_bug.cgi?id=64368 issue 64368]'').
 
  
The POSIX bracket expressions available are listed below. Note that the exact definition of each depends on ''locale'' - for example in a different language other characters may be considered 'alphabetic letters' in [:alpha:]. The meanings given here apply generally to English-speaking locales (and do not take into account any Unicode issues).
+
Es gibt eine ganze Menge Irritation darüber in der OpenOffice.org community. Sogar die Help-Dokumentation ist unklar formuliert.
  
;<b><nowiki>[:digit:]</nowiki></b> : stands for any of the digits <b>0123456789</b>. This is equivalent to <b>0-9</b>.
+
Es gibt eine Reihe von `POSIX Klammerausdrücken' (manchmal als 'POSIX Zeichenklasse' bezeichnet) die in Ooo RegEx verfügbar sind in der Form <b>[:classname:]</b>, die es erlauben irgend ein Zeichen dieser Klasse zu finden. Z.B. <b><nowiki>[:digit:]</nowiki></b> entspricht irgend einem Zeichen von <b>0123456789</b>.
  
;<b><nowiki>[:space:]</nowiki></b> : should stand for any whitespace character, including tab; however as currently implemented it stands simply for a space character. Note that the Help is currently misleading here. (''This is the subject of [http://qa.openoffice.org/issues/show_bug.cgi?id=41706 issue 41706]'').
 
  
;<b><nowiki>[:print:]</nowiki></b> :  should stand for any printable character;  however as currently implemented it does not match the single quote nor the double quote characters <b>‘ ’ “ ”</b> (and some others such as  <b>« »</b>).  It matches space,  but does not match tab (this latter is expected/defined behaviour). (''This is the subject of [http://qa.openoffice.org/issues/show_bug.cgi?id=83290 issue 83290]'').
+
Per Definition dürfen sie nur <b>innerhalb der eckigen Klammern</b>  einer alternativen Suche auftreten – würde eine gültige Syntax <b><nowiki>[abc[:digit:]]</nowiki></b> sein, die '''a''', '''b''', '''c''', oder jede Zahl '''0-9''' finden sollte. Eine korrekte Syntax für jede Zahl wäre <b><nowiki>[[:digit:]]</nowiki></b>.
  
;<b><nowiki>[:cntrl:]</nowiki></b> : stands for a control character. As far as a user is concerned, OpenOffice.org documents have very few control characters;  tab and hard_line_break are both matched, but paragraph_mark is not.
 
  
;<b><nowiki>[:alpha:]</nowiki></b> : stands for a letter (including a letter with an accent). For example in the phrase (often used in English, and here given with accents as in the original language) '<b>déjà vu</b>' all 6 letters will match.
+
Leider funktioniert das nicht so wie es sollte! Die korrekte Sytax funktioniert überhaupt nicht, aber derzeit findet die "falsche" Darstellung <b><nowiki>([:digit:])</nowiki></b> eine Zahl wenn sie sich <b>außerhalb</b> der eckigen Klammern einer alternativ Suche befindet. („Natürlich ist das unbefriedigend und wird in der Fehlermeldung [http://qa.openoffice.org/issues/show_bug.cgi?id=64368 issue 64368]'' behandelt).
  
;<b><nowiki>[:alnum:]</nowiki></b> : stands for a character that satisfies either <b>[:alpha:]</b> or <b>[:digit:]</b>
 
  
;<b><nowiki>[:lower:]</nowiki></b> : stands for a lowercase letter (including a letter with an accent). The case matching does not work unless the <b>Match case</b> box is ticked; if this box is ''not'' ticked this expression is equivalent to <b>[:alpha:]</b>.
+
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).
  
;<b><nowiki>[:upper:]</nowiki></b> : stands for an uppercase letter (including a letter with an accent). The case matching does not work unless the <b>Match case</b> box is ticked; if this box is ''not'' ticked this expression is equivalent to <b>[:alpha:]</b>.
 
  
 +
;<b><nowiki>[:digit:]</nowiki></b> : steht für jede Zahl <b>0123456789</b>. Das entspricht <b>0-9</b>.
  
There seems to be little consistency in any implementation of  POSIX bracket expressions (OOo or elsewhere). One approach is simply to use straightforward character classes - so instead of <b><nowiki>[[:digit:]]</nowiki></b> you use <b><nowiki>[0-9]</nowiki></b> for example.
 
  
 +
;<b><nowiki>[:space:]</nowiki></b> :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 [http://qa.openoffice.org/issues/show_bug.cgi?id=41706 issue 41706]'').
  
== Grouping (...) and backreferences \x $x ==
 
Round brackets '''( )''' may be used to group terms. 
 
  
 +
;<b><nowiki>[:print:]</nowiki></b> : sollte für jeder druckbare Zeichen stehen, trotzdem findet es derzeit nicht die (einfachen oder doppelten) Anführungsstriche <b>‘ ’ “ ”</b> (und einige andere wie <b>« »</b>). Es findet Leerzeichen aber keine Tabulatorzeichen (das ist späterer erwarteter /definierter Inhalt). (Fehlermeldung: [http://qa.openoffice.org/issues/show_bug.cgi?id=83290 issue 83290]'').
  
''For example:'' '''red(den)?''' will find '<b>red</b>' and '<b>redden</b>'; here '''(den)?''' means 'one or zero of <b>den</b>'.
 
  
''For example:'' '''(blue|black)bird''' will find both '<b>bluebird</b>' and '<b>blackbird</b>'.
+
;<b><nowiki>[:cntrl:]</nowiki></b> : 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.
  
  
Each group enclosed in round brackets is also defined as a reference, and can be referred to later in the same expression using a 'backreference'. In the 'Search for' box, backreferences are written '<b>\1</b>', '<b>\2</b>', etc.; in the 'Replace with' box they are written '<b>$1</b>', '<b>$2</b>', etc.
+
;<b><nowiki>[:alpha:]</nowiki></b> : stehen für einen Buchstaben (einschließlich Buchstaben mit Akzent). Z.B. in der Phrase '<b>déjà vu</b>' (die im Englischen öfters verwendet wird und hier mit den Akzenten der Originalsprache geschrieben ist) werden alle 6 Buchstaben gefunden.
  
'<b>\1</b>' or '<b>$1</b>' stands for 'whatever matched in the first round brackets'; '<b>\2</b>' or '<b>$2</b>' stands for 'whatever matched in the second round brackets'; and so on.
 
  
 +
;<b><nowiki>[:alnum:]</nowiki></b> : steht für Zeichen die entweder <b>[:alpha:]</b> oder <b>[:digit:]</b> sind.
  
''For example:'' '''(blue|black) \1bird''' in the 'Search for' box will find both '<b>blue bluebird</b>' and '<b>black blackbird</b>', because '<b>\1</b>' stands for either '''blue''' or '''black''', whichever we found. Therefore '<b>black bluebird</b>' does '''not''' match.
 
  
 +
;<b><nowiki>[:lower:]</nowiki></b> :  setht für Kleinbuchstaben (einschließlich Buchstaben mit Akzent). Die Großschreibungs- Unterscheidung funktioniert wenn die <b>Groß/Kleischreibung</b> sbox ''nicht'' markiert ist, ansonsten entspricht die Wirkung <b>[:alpha:]</b>.
  
'''Backreferences in the 'Replace with' box only work from [[OOoRelease24|OOo2.4]] onwards'''. The use of $1 rather than \1 is consistent with perl syntax, and more particularly with the ICU regex engine, which may at some time replace the existing OOo regex engine, thus resolving many issues.
 
  
 +
;<b><nowiki>[:upper:]</nowiki></b> :steht für Großbuchstaben (einschließlich Buchstaben mit Akzent).  Die Großschreibungs- Unterscheidung funktioniert nur wenn die <b>Groß/Kleischreibung</b> sbox markiert ist, ansonsten entspricht die Wirkung <b>[:alpha:]</b>.
  
''For example:'' '''(gr..n)(blu.)''' in the 'Search for' box will find '<b>greenblue</b>'; if the 'Replace with' box has '''$2$1''' the replacement will be '<b>bluegreen</b>'.
 
  
 +
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 <b><nowiki>[[:digit:]]</nowiki></b> benutzt man <b><nowiki>[0-9]</nowiki></b>.
  
When regular expressions are selected, to replace text with the literal character '<b>$</b>' you must now use '<b>\$</b>'; similarly for '<b>\</b>' use '<b>\\</b>'.
 
  
  
''For example:'' '''(1..)''' in the 'Search for' box and '''\$$1''' in the 'Replace with' box replaces '<b>100</b>' with '<b>$100</b>', and '<b>150</b>' with '<b>$150</b>'.
+
== Gruppieren () und Rückbezüge \x $x ==
  
 +
Runde Klammern '"( )"' können zum Gruppieren von Termen verwendet werden.
  
'''$0''' in the 'Replace with' box replaces with the entire text found.
 
  
== Tabs, newlines, paragraphs  \t \n  $  ==
+
"Z.B.:" '''red(den)?''' wird '<b>red</b>' und '<b>redden</b>' finden; '''(den)?'''bedeutet 'ein oder keinmal <b>den</b>'.
The character pair <b>'\t'</b> has special meaning - it stands for a '''tab''' character.
+
  
  
''For example:'' '''\tred''' will match a '''tab''' character followed by the word '<b>red</b>'.
+
"Z.B.:" '''(blue|black)bird''' findet sowohl '<b>bluebird</b>' als auch '<b>blackbird</b>'.
  
  
In Writer a '''newline''' may be entered by pressing Shift-Enter. A newline character is thereby inserted into the text, and the following text starts on a new line. This is not the same as a new paragraph; click ''View-Non printing characters'' to see the difference.
+
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 '<b>\1</b>', '<b>\2</b>', etc. und in der 'Ersetzen durch' Box als '<b>$1</b>', '<b>$2</b>' usw.
  
  
The OOo regular expression behaviour when matching paragraph marks and newline characters is 'unusual'. This is partly because regular expressions in other software usually deal with ordinary plain text, whereas OOo regular expressions divide the text at paragraph marks. For whatever reason, this is what you can do:
+
'<b>\1</b>' oder '<b>$1</b>' steht für 'irgend etwas das zwischen den ersten runden Klammern stand'; '<b>\2</b>' or '<b>$2</b>' für 'irgend etwas das zwischen den zweiten runden Klammern stand' usw.
 +
 +
 
 +
"Z.B." '''(blue|black) \1bird''' in der 'Suchen' Box wird sowohl '<b>blue bluebird</b>' als auch '<b>black blackbird</b>' finden, weil '<b>\1</b>' entweder für "blue" oder "black" steht, was immer auch gefunden wurde. Darum wird auch  '<b>black bluebird</b>' nicht gefunden.
 +
 
 +
 
 +
'"Rückbezüge in der 'Ersetzen durch' Box funktionieren erst ab [[OooRelease24|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 '<b>greenblue</b>'; in der Erstezungsfunktion erzeugt '''$2$1'''  '<b>bluegreen</b>'.
 +
 
 +
 
 +
Wenn die Regulären Ausdrücke zur Textersetzung von '<b>$</b>' verwendet werden, muss man dann mit '<b>\$</b>' entsprechend für '<b>\</b>' bei '<b>\\</b>' arbeiten.
 +
 
 +
 
 +
"Z.B.:" im 'Suchen nach' Feld und  '''\$$1''' im 'Ersetzen durch' ersetzt '<b>100</b>' durch  '<b>$100</b>', und '<b>150</b>'  durch '<b>$150</b>'.
 +
 
 +
 
 +
'''$0''' im 'Ersetzen durch' Feld überschreibt mit dem gesamten gefundenen Text.
 +
 
 +
 
 +
 
 +
== Tabulatoren, Zeile, Absatzmarke  \t \n  $  ==
 +
 
 +
Das Zeichenpaar <b>'\t'</b> hat eine besondere Bedeutung – es steht für das '''tab''' (Tabulatorzeichen).
 +
 
 +
 
 +
"Z.B.:" '''\tred''' findet ein '''tab''' Zeichen gefolgt vom Wort '<b>red</b>'.
 +
 
 +
 
 +
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:
  
  
Line 392: Line 316:
 
* 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.
 
* 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 '<b>red</b>' wenn es von einem Zeilenumbruch gefolgt wird. In diesem Fall führt das Ersetzen durch'<b>blue</b>' nur zum Ersetzen von '<b>red</b>' - da bei wird der Zeilenwechsel nicht verändert (bleibt intakt).
 +
* '''red\ngreen''' entspricht '<b>red</b>' gefolgt von einem Zeilenumbruch gefolgt von '<b>green</b>'; ein Ersetzen durch  '<b>brown</b>' 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 '<b>space</b>' ersetzt werden oder entfernt werden, um zwei Absätze zu Vereinigen. Beachte: '''red$''' entspricht '<b>red</b>' am Absatzende, und wenn man es mit Beispielsweise einem Leerzeichen '''space''' ersetzt, erhält man nur ein Leerzeichen  '''space''' wo '<b>red</b>' 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).
  
To replace paragraph marks - as used to give lines a certain length in some html documents, for instance - with "normal" automatically wrapped lines and paragraphs, the following 3 steps should help.
 
  
1. So as not to lose "normal" paragraph marks at the end of "normal" paragraphs, replace two consecutive paragraph marks using a sequence of characters not occurring anywhere else in the text, like "*****" to replace an empty paragraph - this makes it easy to find and reinstate later. You do this by putting '''^$''' in the Find box and "*****" in the Replace box. (If you're only dealing with a limited chunk of text, don't forget to check "current selection only" under "more options" in the Find and Replace box.)
 
  
2. Search for the remaining line-end paragraph marks by putting '''$''' in the Find box. To replace the mark with a "space" just type a '''space''' in the Replace dialogue.  
+
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)
  
3. Now that the text is ready for normal line-wrapping, put back the "normal" paragraph marks by typing "*****" in the Find box and '''\n''' in the Replace box. (Remember to check "current selection only" where appropriate!)
+
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.
  
Before you try this, create a test document to practise on.
+
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.)
  
This is a good sequence to make into a macro.
 
  
It also helps deal indirectly with line-break problems.
+
Vor dem  erstmaligen Einsatz dieser Befehlsfolge, sollte man es an einem Testdokument geübt haben.
  
== Hexadecimal codes \xXXXX ==
 
The character sequence ' <b>\x</b> then a 4 digit hexadecimal number ' stands for the character with that code.
 
  
''For example:'' <b>\x002A</b> stands for the star character '<b>*</b>'.
+
Für diese Befehlsfolge bietet sich ein Macro an.
  
Hexadecimal codes can be seen on the ''''Insert-Special Character'''' dialog.
 
  
 +
Sie hilft auch indirekt bei Zeilenumbruchsproblemen.
  
== The 'Replace with' box \t \n & $1 $2 ==
 
Users are sometimes confused with what can be done using the 'Replace with' box in a Find & Replace dialog.
 
  
In general, regular expressions '''do not work''' in the 'Replace with' box. The characters you type replace the found text literally.
+
== Hexadezimal Codes \xXXXX ==
  
The four constructs that do work are:
+
Die Zeichenfolge ' <b>\x</b>vierstellige Hexadezimal-Zahl' entspricht dem Zeichen mit diesem Code.
  
* '''\t''' inserts a tab, replacing the text found.
 
* '''\n''' inserts a paragraph mark, replacing the text found. This may be unexpected, because '''\n''' in the 'Search for' box means 'newline'! In some operating systems it is possible to use unicode input to directly type a newline character (U+000A) in the 'Replace with' box, providing a workaround, but this is not universal.
 
* '''$1''', '''$2''', etc are backreferences, which (from OOo2.4) insert text groups found. See under [[#Grouping (...) and backreferences \x $x|Grouping and backreferences]]. '''$0''' inserts the entire text found.
 
* '''&''' also inserts the entire text found.
 
  
''For example'' if you searched for '''bird|berry''', you would would find either '<b>bird</b>' or '<b>berry</b>'; now to replace with '''black&''' would give you either '<b>blackbird</b>' or '<b>blackberry</b>'.
+
"Z.B.:" <b>\x002A</b> steht für das Stern-Zeichen  '<b>*</b>'.
  
== Troubleshooting OOo regular expressions ==
 
If you are new to regular expressions, please realise that they can be tricky - if you are not getting the results you expect, you might need to check that you understand well enough. Try to keep regular expressions as simple and unambitious as possible.
 
  
 +
Die Hexadezimal-Codes sieht man beim "Einfügen-Sonderzeichen" Dialog.
  
Here are some further points of interest with OOo regular expressions:
 
  
* If you find an unexpected behaviour, please check in the relevant section in this HowTo - many of the behaviour issues have been documented here.
 
* Regular expressions are 'greedy' - that is they will match as much text as they can. Consider using curly and square brackets; ''for example'' <b>[^ ]{1,5}\></b> matches 1 to 5 non-space characters at the end of a word.
 
* Please be careful when using the '''Replace All''' button. There are a few rare occasions when this will give unexpected results. For example to remove the first character of every paragraph you might 'Search for' <b>^.</b> and 'Replace with' nothing; clicking 'Replace All' now will wipe out *all* your text, instead of just the first character of each paragraph. [http://qa.openoffice.org/issues/show_bug.cgi?id=82473 Issue 82473] discusses this. The workaround is to 'Find All', then 'Replace'; perhaps the safest way is not to use the 'Replace All' button at all with regular expressions.
 
  
 +
== Die 'Ersetzen mit' Box und \t \n & $1 $2 ==
  
== Tips and Tricks ==
+
 
Here are some examples that may be useful:
+
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|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 '<b>bird</b>' oder '<b>berry</b>', ersetzt man mit '''black&''' erhält man entweder '<b>blackbird</b>' oder '<b>blackberry</b>'.
 +
 
 +
 
 +
== 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.:' <b>[^ ]{1,5}\></b> 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 <b>^.</b> 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 [http://qa.openoffice.org/issues/show_bug.cgi?id=82473 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.
  
 
<tt>'''\<([^ ]+)[ ]+\1'''</tt>
 
<tt>'''\<([^ ]+)[ ]+\1'''</tt>
: finds duplicate words separated by spaces (note that there is a space before each <b>]</b>)
+
 
 +
 
 +
: findet Wortdoppelungen (''duplicate words '') die durch Leerzeichen getrennt sind (Beachte da ist ein Leerzeichen vor jedem <b>]</b>)
  
 
<tt>'''\<[:alpha:]*\>'''</tt>
 
<tt>'''\<[:alpha:]*\>'''</tt>
: finds any word in the whole document (notice:the check box regular expression must by checkt)
+
 
 +
: findet jedes Wort im ganzen Dokument (z.B. zum Worte zählen). Beachte: die RegEx Optionsbox muss ausgewählt sein.
  
 
<tt>'''\<[1-9][0-9]*\>'''</tt>
 
<tt>'''\<[1-9][0-9]*\>'''</tt>
  
: finds decimal numbers
+
: findet Dezimalzahlen
 +
 
  
 
<tt>'''\<0[0-7]*\>'''</tt>
 
<tt>'''\<0[0-7]*\>'''</tt>
: finds octal  (base 8) numbers
+
: Findet Oktalzahlen (Basis 8)
 +
 
  
 
<tt>'''\<0x[A-Fa-f0-9]+\>'''</tt>
 
<tt>'''\<0x[A-Fa-f0-9]+\>'''</tt>
: finds hexadecimal (base 16) numbers
+
: findet Hexadezimalzahlen (Basis 16)
 +
 
  
 
<tt>'''[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-z]{2,6}'''</tt>
 
<tt>'''[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-z]{2,6}'''</tt>
: finds <u>most</u> email addresses (there is no perfect regular expression - this is a practical solution)
 
  
{{Documentation/SeeAlso|
+
:findet <u>die Mehrzahl</u> von E-Mail Adressen (kein perfekter RegEx – aber eine Praxislösung)
 +
 
 +
 
 +
{{SeeAlso|EN|
 
* [http://www.icu-project.org/userguide/regexp.html The ICU regular expression package], a candidate to replace the existing OOo regular expression engine (see: [[Regexp]]).
 
* [http://www.icu-project.org/userguide/regexp.html The ICU regular expression package], a candidate to replace the existing OOo regular expression engine (see: [[Regexp]]).
 
* [http://www.OOoNinja.com/2007/12/example-regular-expressions-for-writer.html Example regular expressions] (OpenOffice.org Ninja)
 
* [http://www.OOoNinja.com/2007/12/example-regular-expressions-for-writer.html Example regular expressions] (OpenOffice.org Ninja)
Line 470: Line 429:
 
}}
 
}}
  
Category:Documentation/Reference]]
+
[[Category:DE/Documentation/Reference]]
Category:Writer]]
+
[[Category:DE/Documentation/How Tos]]
Category:Documentation/How Tos/Writer]]
+

Latest revision as of 09:54, 17 July 2018


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