Zum Inhalt springen

Regular Expression/Zeichenklassen: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „„“ durch „"“
K Textersetzung - „http://“ durch „https://“
Zeile 1: Zeile 1:
== Zeichenklassen ==
== Zeichenklassen ==
; Vordefinierten Zeichenklassen
; Vordefinierten Zeichenklassen
In vielen neueren Implementationen können innerhalb der eckigen Klammern nach [http://de.wikipedia.org/wiki/POSIX POSIX] auch Klassen (vordefinierte Listen) angegeben werden, die selbst wiederum eckige Klammern enthalten.
In vielen neueren Implementationen können innerhalb der eckigen Klammern nach [https://de.wikipedia.org/wiki/POSIX POSIX] auch Klassen (vordefinierte Listen) angegeben werden, die selbst wiederum eckige Klammern enthalten.


{| class="wikitable sortable"
{| class="wikitable sortable"
Zeile 44: Zeile 44:
| |
| |
| | <tt>\s</tt>
| | <tt>\s</tt>
| | <tt>[ [http://en.wikipedia.org/wiki/%5Ct \t]]</tt>
| | <tt>[ [https://en.wikipedia.org/wiki/%5Ct \t]]</tt>
| | Space and tab
| | Space and tab
|-
|-
Zeile 59: Zeile 59:
| |
| |
| | <tt>[\x00-\x1F\x7F]</tt>
| | <tt>[\x00-\x1F\x7F]</tt>
| | [http://en.wikipedia.org/wiki/Control_character Control characters]
| | [https://en.wikipedia.org/wiki/Control_character Control characters]
|-
|-
| | <tt>[:digit:]</tt>
| | <tt>[:digit:]</tt>
Zeile 107: Zeile 107:
| | <tt>\s</tt>
| | <tt>\s</tt>
| | <tt>\_s</tt>
| | <tt>\_s</tt>
| | <tt>[ [http://en.wikipedia.org/wiki/%5Ct \t][http://en.wikipedia.org/wiki/%5Cr \r][http://en.wikipedia.org/wiki/%5Cn \n][http://en.wikipedia.org/wiki/%5Cv \v][http://en.wikipedia.org/wiki/%5Cf \f]]</tt>
| | <tt>[ [https://en.wikipedia.org/wiki/%5Ct \t][https://en.wikipedia.org/wiki/%5Cr \r][https://en.wikipedia.org/wiki/%5Cn \n][https://en.wikipedia.org/wiki/%5Cv \v][https://en.wikipedia.org/wiki/%5Cf \f]]</tt>
| | [http://en.wikipedia.org/wiki/Whitespace_character Whitespace characters]
| | [https://en.wikipedia.org/wiki/Whitespace_character Whitespace characters]
|-
|-
| |
| |
Zeile 157: Zeile 157:
<tt>'''[:print:]'''</tt> — Druckbare Zeichen: [:alnum:], [:punct:] und Leerzeichen
<tt>'''[:print:]'''</tt> — Druckbare Zeichen: [:alnum:], [:punct:] und Leerzeichen


<tt>'''[:blank:]'''</tt> — [http://de.wikipedia.org/wiki/Leerzeichen Leerzeichen] oder [http://de.wikipedia.org/wiki/Tabulator Tabulator]
<tt>'''[:blank:]'''</tt> — [https://de.wikipedia.org/wiki/Leerzeichen Leerzeichen] oder [https://de.wikipedia.org/wiki/Tabulator Tabulator]


<tt>'''[:space:]'''</tt> — [http://de.wikipedia.org/wiki/Leerraum Whitespace]: Horizontaler und vertikaler Tabulator, [http://de.wikipedia.org/wiki/Zeilenvorschub Zeilen]- und [http://de.wikipedia.org/w/index.php?title=Seitenvorschub&action=edit&redlink=1 Seitenvorschub], [http://de.wikipedia.org/wiki/Wagenrücklauf Wagenrücklauf] und Leerzeichen
<tt>'''[:space:]'''</tt> — [https://de.wikipedia.org/wiki/Leerraum Whitespace]: Horizontaler und vertikaler Tabulator, [https://de.wikipedia.org/wiki/Zeilenvorschub Zeilen]- und [https://de.wikipedia.org/w/index.php?title=Seitenvorschub&action=edit&redlink=1 Seitenvorschub], [https://de.wikipedia.org/wiki/Wagenrücklauf Wagenrücklauf] und Leerzeichen


<tt>'''[:graph:]'''</tt> — Graphische Zeichen: [:alnum:] oder [:punct:]
<tt>'''[:graph:]'''</tt> — Graphische Zeichen: [:alnum:] oder [:punct:]
Zeile 165: Zeile 165:
<tt>'''[:punct:]'''</tt> — Satzzeichen wie: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
<tt>'''[:punct:]'''</tt> — Satzzeichen wie: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~


<tt>'''[:alnum:]'''</tt> — [http://de.wikipedia.org/wiki/Alphanumerische_Zeichen Alphanumerische Zeichen]: [:alpha:] oder [:digit:]
<tt>'''[:alnum:]'''</tt> — [https://de.wikipedia.org/wiki/Alphanumerische_Zeichen Alphanumerische Zeichen]: [:alpha:] oder [:digit:]


<tt>'''[:xdigit:]'''</tt> — [http://de.wikipedia.org/wiki/Hexadezimalsystem Hexadezimale] Ziffern: 0 bis 9, A bis F, a bis f.
<tt>'''[:xdigit:]'''</tt> — [https://de.wikipedia.org/wiki/Hexadezimalsystem Hexadezimale] Ziffern: 0 bis 9, A bis F, a bis f.


<tt>'''[:digit:]'''</tt> — Die Ziffern 0 bis 9
<tt>'''[:digit:]'''</tt> — Die Ziffern 0 bis 9
Zeile 202: Zeile 202:
|style="font-size:smaller"| '''Anmerkungen:'''
|style="font-size:smaller"| '''Anmerkungen:'''
{{FNZ|ZK1|Das auch als "[[geschütztes Leerzeichen]]" bekannte Zeichen mit der Unicode-Nummer 160 (hex: A0) (entspricht dem [[Entitäten in Auszeichnungssprachen|HTML-Entity]] &amp;nbsp;) wird von der Klasse [:space:] möglicherweise nicht gefunden und muss separat anhand des [[Codepoint|Kodierpunktes]] identifiziert werden.}}
{{FNZ|ZK1|Das auch als "[[geschütztes Leerzeichen]]" bekannte Zeichen mit der Unicode-Nummer 160 (hex: A0) (entspricht dem [[Entitäten in Auszeichnungssprachen|HTML-Entity]] &amp;nbsp;) wird von der Klasse [:space:] möglicherweise nicht gefunden und muss separat anhand des [[Codepoint|Kodierpunktes]] identifiziert werden.}}
{{FNZ|ZK2|Was Buchstaben sind, ist in üblichen Betriebssystemen ''locale''-abhängig, also abhängig von der eingestellten Region und Sprache.<ref>[http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_03_05 RE Bracket Expression], IEEE Std 1003.1, The Open Group Base Specifications, 2004</ref>}}
{{FNZ|ZK2|Was Buchstaben sind, ist in üblichen Betriebssystemen ''locale''-abhängig, also abhängig von der eingestellten Region und Sprache.<ref>[https://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_03_05 RE Bracket Expression], IEEE Std 1003.1, The Open Group Base Specifications, 2004</ref>}}
|}
|}


Zeile 241: Zeile 241:
| | <tt>'''\s'''</tt>
| | <tt>'''\s'''</tt>
| | white'''s'''pace
| | white'''s'''pace
| | meistens das Leerzeichen und die Klasse der [http://de.wikipedia.org/wiki/Steuerzeichen Steuerzeichen] \f, \n, \r, \t und \v
| | meistens das Leerzeichen und die Klasse der [https://de.wikipedia.org/wiki/Steuerzeichen Steuerzeichen] \f, \n, \r, \t und \v
|-
|-
| | <tt>'''\S'''</tt>
| | <tt>'''\S'''</tt>
Zeile 265: Zeile 265:
| | <tt>'''\n'''</tt>
| | <tt>'''\n'''</tt>
| | newline
| | newline
| | ein [http://de.wikipedia.org/wiki/Zeilenumbruch Zeilenumbruch] im Unix-Format
| | ein [https://de.wikipedia.org/wiki/Zeilenumbruch Zeilenumbruch] im Unix-Format
|-
|-
| | <tt>'''\r'''</tt>
| | <tt>'''\r'''</tt>
| | return
| | return
| | ein [http://de.wikipedia.org/wiki/Zeilenumbruch Zeilenumbruch] im Mac-Format
| | ein [https://de.wikipedia.org/wiki/Zeilenumbruch Zeilenumbruch] im Mac-Format
|-
|-
| | <tt>'''\r\n'''</tt>
| | <tt>'''\r\n'''</tt>
| |
| |
| | ein [http://de.wikipedia.org/wiki/Zeilenumbruch Zeilenumbruch] im Windows-Format
| | ein [https://de.wikipedia.org/wiki/Zeilenumbruch Zeilenumbruch] im Windows-Format


|-
|-

Version vom 7. April 2025, 14:43 Uhr

Zeichenklassen

Vordefinierten Zeichenklassen

In vielen neueren Implementationen können innerhalb der eckigen Klammern nach POSIX auch Klassen (vordefinierte Listen) angegeben werden, die selbst wiederum eckige Klammern enthalten.

POSIX Non-standard Perl/Tcl Vim ASCII Description
[:alnum:] [A-Za-z0-9] Alphanumeric characters
[:word:] \w \w [A-Za-z0-9_] Alphanumeric characters plus "_"
\W \W [^A-Za-z0-9_] Non-word characters
[:alpha:] \a [A-Za-z] Alphabetic characters
[:blank:] \s [ \t] Space and tab
\b \< \> (?<=\W)(?=\w)|(?<=\w)(?=\W) Word boundaries
[:cntrl:] [\x00-\x1F\x7F] Control characters
[:digit:] \d \d [0-9] Digits
\D \D [^0-9] Non-digits
[:graph:] [\x21-\x7E] Visible characters
[:lower:] \l [a-z] Lowercase letters
[:print:] \p [\x20-\x7E] Visible characters and the space character
[:punct:] [][!"#$%&'()*+,./:;<=>?@\^_`{| class="wikitable sortable"}~-] Punctuation characters
[:space:] \s \_s [ \t\r\n\v\f] Whitespace characters
\S [^ \t\r\n\v\f] Non-whitespace characters
[:upper:] \u [A-Z] Uppercase letters
[:xdigit:] \x [A-Fa-f0-9] Hexadecimal digits

POSIX Zeichenklassen können nur innerhalb von Klammer-Ausdrücken genutzt werden.

Vordefinierten Zeichenklassen müssen in eckige Klammern

falsch

grep -E '[:alnum:]' Datei
  • findet z. B.  'a', da es eines der Zeichen ':alnum:' ist, aber nicht 'b' oder '1'
  • (die vordefinierte Liste wird nicht als solche interpretiert!)

richtig

grep -E '[[:alnum:]]' Datei
  • findet sowohl 'a', als auch 'b' oder '1', da die vordefinierte Liste nun als "Buchstabe oder Zahl" interpretiert wird
grep -E '[[:alnum:] ]' Datei
  • findet zusätzlich zu Buchstaben und Zahlen auch Leerzeichen
grep -E '[0-9a-zA-Z]' Datei

Zeichenklassen, hierarchisch sortiert

[:cntrl:] — Steuerzeichen. Im ASCII sind das die Zeichen 00 bis 1F und 7F (DEL).

[:print:] — Druckbare Zeichen: [:alnum:], [:punct:] und Leerzeichen

[:blank:]Leerzeichen oder Tabulator

[:space:]Whitespace: Horizontaler und vertikaler Tabulator, Zeilen- und Seitenvorschub, Wagenrücklauf und Leerzeichen

[:graph:] — Graphische Zeichen: [:alnum:] oder [:punct:]

[:punct:] — Satzzeichen wie: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~

[:alnum:]Alphanumerische Zeichen: [:alpha:] oder [:digit:]

[:xdigit:]Hexadezimale Ziffern: 0 bis 9, A bis F, a bis f.

[:digit:] — Die Ziffern 0 bis 9

[:alpha:] — Buchstaben: [:lower:] oder [:upper:]

[:lower:] — Kleinbuchstaben: nicht notwendigerweise nur von a bis z

[:upper:] — Großbuchstaben: nicht notwendigerweise nur von A bis Z

Anmerkung

Was Buchstaben sind, ist im Allgemeinen locale-abhängig, also abhängig von der eingestellten Region und Sprache.

Beispiele für Zeichenklassen, hierarchisch sortiert
  • [:cntrl:] – Steuerzeichen. Im ASCII sind das die Zeichen 00 bis 1F und 7F (DEL).
  • [:print:] – Druckbare Zeichen: [:alnum:], [:punct:] und Leerzeichen
Anmerkungen:

Vorlage:FNZ Vorlage:FNZ

Beispiel

Die Buchstaben "y" und "i" sollen durch "xx" ersetzt werden.

echo -e "Mayer\nMaier\nMeyer\nMeier" | sed 's/[yi]/xx/'

Beachten Sie, dass beim Suchen und Ersetzen immer alle Zeilen komplett ausgegeben werden, unabhängig davon ob Ersetzungen durchgeführt wurden oder nicht. Daher lassen sich mehrere Suchen und Ersetzen Anweisungen gut aneinanderreihen.

"i" und "y" sollen durch "ii" ersetzt werden, sodann "a" und "e" durch "oo"
$ echo -e "Mayer\nMaier\nMeyer\nMeier" | sed -e 's/[iy]/ii/g' -e 's/[ae]/oo/g'
Mooiioor

Vordefinierte Zeichenklassen

Es gibt vordefinierte Zeichenklassen, die allerdings nicht von allen Implementierungen unterstützt werden, da sie lediglich Kurzformen sind und auch durch eine Zeichenauswahl beschrieben werden können.

Wichtige Zeichenklassen sind:

\d digit eine Ziffer [0-9]
\D no digit ein Zeichen, das keine Ziffer ist, also [^\d]
\w wordcharacter ein Buchstabe, eine Ziffer oder der Unterstrich, also [a-zA-Z_0-9] (und evtl. weitere Buchstaben, z. B.  Umlaute)
\W no wordcharacter ein Zeichen, das weder Buchstabe noch Zahl noch Unterstrich ist, also [^\w]
\s whitespace meistens das Leerzeichen und die Klasse der Steuerzeichen \f, \n, \r, \t und \v
\S no whitespace ein Zeichen, das kein Whitespace ist [^\s]
\b leere Zeichenkette am Wortanfang oder am Wortende
\B leere Zeichenkette, die nicht den Anfang oder das Ende eines Wortes bildet
\< leere Zeichenkette am Wortanfang
\> leere Zeichenkette am Wortende
\n newline ein Zeilenumbruch im Unix-Format
\r return ein Zeilenumbruch im Mac-Format
\r\n ein Zeilenumbruch im Windows-Format

Weitere Zeichen

^ steht für den Zeilenanfang (nicht zu verwechseln mit "^" bei der Zeichenauswahl mittels "[" und "]").
$ kann je nach Kontext für das Zeilen- oder Stringende stehen, wobei bei manchen Implementierungen noch ein "\n" folgen darf. Das tatsächliche Ende wird von \z gematcht.
\ hebt gegebenenfalls die Metabedeutung des nächsten Zeichens auf. Beispielsweise lässt der Ausdruck "(A\*)+" die Zeichenketten "A*", "A*A*", usw. zu. Auf diese Weise lässt sich auch ein Punkt "." mit "\." suchen, während nach "\" mit "\\" gesucht wird.

Weitere Beispiele

[egh]
  • eines der Zeichen "e", "g" oder "h"
[0-6]
  • eine Ziffer von "0" bis "6" (Bindestriche sind Indikator für einen Bereich)
[A-Za-z0-9]
  • ein beliebiger lateinischer Buchstabe oder eine beliebige Ziffer
[^a]
  • ein beliebiges Zeichen außer "a" ("^" am Anfang einer Zeichenklasse negiert selbige)
[-A-Z], [A-Z-] bzw. [A-Z\-a-z], allerdings nicht gemäß POSIX)
  • Auswahl enthält auch den Bindestrich "-", wenn er das erste oder das letzte Zeichen in der Aufzählung einer Zeichenklasse ist bei PCRE, wenn seine Metafunktion innerhalb einer Auswahl durch ein vorangestelltes "\"-Zeichen aufgehoben wird
\<[Aa]+n+[ae]+\>
  • findet alle Wörter, die ungefähr wie Anne oder Anna aussehen, nur mit beliebig vielen "A", "n" und "e" (sofern sie jeweils mindestens ein mal vorkommen). AAnnneeea würde zum Beispiel auch passen.
[Ss]up(er|ra)
  • findet alle Wörter, die ein Super, super, Supra oder supra enthalten.
^digit:
  • findet alle Zeilen, die mit einer Ziffer beginnen.