Posix Klammerausdrücke

POSIX-Klammerausdrücke

POSIX-Klammerausdrücke sind eine besondere Art von Zeichenklassen. POSIX-Klammerausdrücke entsprechen einem Zeichen aus einer Reihe von Zeichen, genau wie normale Zeichenklassen. Sie verwenden dieselbe Syntax mit eckigen Klammern. Ein Bindestrich erzeugt einen Bereich und ein Caret am Anfang negiert den Klammerausdruck. Ein wesentlicher syntaktischer Unterschied besteht darin, dass der Backslash KEIN Metazeichen in einem POSIX-Klammerausdruck ist. In POSIX entspricht der reguläre Ausdruck [\d] also einem \ oder einem d. Um ein ] zu finden, fügen Sie es als erstes Zeichen nach dem öffnenden [ oder dem negierenden ^ ein. Um ein – abzugleichen, setzen Sie es direkt vor das schließende ]. Um ein ^ zu finden, setzen Sie es vor das letzte Literal – oder das schließende ]. Zusammengenommen entspricht []\d^-] ], \, d, ^ oder -. Der Hauptzweck von Klammerausdrücken besteht darin, dass sie sich an das Gebietsschema des Benutzers oder der Anwendung anpassen. Ein Gebietsschema ist eine Sammlung von Regeln und Einstellungen, die sprachliche und kulturelle Konventionen wie Sortierreihenfolge, Datumsformat usw. beschreiben. Der POSIX-Standard definiert diese Gebietsschemas. Im Allgemeinen bieten nur POSIX-kompatible Engines für reguläre Ausdrücke die richtige und vollständige Unterstützung für POSIX-Klammerausdrücke. Einige Nicht-POSIX-Regex-Engines unterstützen POSIX-Zeichenklassen, aber normalerweise keine Sortierfolgen und Zeichenäquivalente. Engines für reguläre Ausdrücke, die Unicode unterstützen, verwenden Unicode-Eigenschaften und -Skripts, um ähnliche Funktionen wie POSIX-Klammerausdrücke bereitzustellen. In Unicode-Regex-Engines stimmen Abkürzungszeichenklassen wie \w normalerweise mit allen relevanten Unicode-Zeichen überein, wodurch die Verwendung von Gebietsschemata entfällt.

Zeichenklassen

Verwechseln Sie den POSIX-Begriff „Zeichenklasse“ nicht mit dem, was normalerweise als Zeichenklasse für reguläre Ausdrücke bezeichnet wird. [x-z0-9] ist ein Beispiel dafür, was in diesem Tutorial eine „Zeichenklasse“ und POSIX einen „Klammerausdruck“ nennt. [:digit:] ist eine POSIX-Zeichenklasse, die innerhalb eines Klammerausdrucks wie [x-z[:digit:]] verwendet wird. Die Namen der POSIX-Zeichenklassen müssen in Kleinbuchstaben geschrieben werden. Bei Verwendung in ASCII-Strings finden diese beiden regulären Ausdrücke genau die gleichen Übereinstimmungen: ein einzelnes Zeichen, das entweder x, y, z oder eine Ziffer ist. Bei Verwendung für Zeichenfolgen mit Nicht-ASCII-Zeichen kann die Klasse [:digit:] je nach Gebietsschema Ziffern in anderen Skripten enthalten. Der POSIX-Standard definiert 12 Zeichenklassen. Die folgende Tabelle listet alle 12 sowie die Klassen [:ascii:] und [:word:] auf, die auch einige Regex-Varianten unterstützen. Die Tabelle zeigt auch äquivalente Zeichenklassen, die Sie in regulären ASCII- und Unicode-Ausdrücken verwenden können, wenn die POSIX-Klassen nicht verfügbar sind. Die ASCII-Äquivalente entsprechen genau dem, was im POSIX-Standard definiert ist. Die Unicode-Äquivalente entsprechen den meisten Unicode-Regex-Engines. Der POSIX-Standard definiert kein Unicode-Gebietsschema. Einige Klassen haben auch Kurzform-Äquivalente im Perl-Stil. Java unterstützt keine POSIX-Klammerausdrücke, aber POSIX-Zeichenklassen, die den \p-Operator verwenden. Obwohl die \p-Syntax der Syntax für Unicode-Eigenschaften entlehnt ist, stimmen die POSIX-Klassen in Java nur mit ASCII-Zeichen überein, wie unten angegeben. Bei den Klassennamen muss die Groß-/Kleinschreibung beachtet werden. Im Gegensatz zur POSIX-Syntax, die nur innerhalb eines Klammerausdrucks verwendet werden kann, kann Javas \p innerhalb und außerhalb von Klammerausdrücken verwendet werden. In Java 8 und früheren Versionen spielt es keine Rolle, ob Sie das Präfix Is mit der Syntax \p verwenden oder nicht. In Java 8 sind \p{Alnum} und \p{IsAlnum} also identisch. In Java 9 und höher gibt es einen Unterschied. Ohne das Präfix Is ist das Verhalten genau das gleiche wie in früheren Java-Versionen. Die Syntax mit dem Präfix Is entspricht jetzt auch Unicode-Zeichen. Für \p{IsPunct} bedeutet dies auch, dass es nicht mehr mit den ASCII-Zeichen übereinstimmt, die in der Kategorie Symbol Unicode sind. Die JGsoft-Variante unterstützt sowohl die POSIX- als auch die Java-Syntax. Ursprünglich stimmte es mit Unicode-Zeichen mit beiden Syntaxen überein. Ab JGsoft V2 entspricht es nur ASCII-Zeichen bei Verwendung der POSIX-Syntax und Unicode-Zeichen bei Verwendung der Java-Syntax.

POSIXDescriptionASCIIUnicodeShorthandJava
[:alnum:]Alphanumeric characters[a-zA-Z0-9][\p{L}\p{Nl}
\p{Nd}]
\p{Alnum}
[:alpha:]Alphabetic characters[a-zA-Z]\p{L}\p{Nl}\p{Alpha}
[:ascii:]ASCII characters[\x00-\x7F]\p{InBasicLatin}\p{ASCII}
[:blank:]Space and tab[ \t][\p{Zs}\t]\h\p{Blank}
[:cntrl:]Control characters[\x00-\x1F\x7F]\p{Cc}\p{Cntrl}
[:digit:]Digits[0-9]\p{Nd}\d\p{Digit}
[:graph:]Visible characters (anything except spaces and control characters)[\x21-\x7E][^\p{Z}\p{C}]\p{Graph}
[:lower:]Lowercase letters[a-z]\p{Ll}\l\p{Lower}
[:print:]Visible characters and spaces (anything except control characters)[\x20-\x7E]\P{C}\p{Print}
[:punct:]Punctuation (and symbols).[!"\#$%&'()*+,
\-./:;<=>?@\[
\\\]^_‘{|}~]
\p{P}\p{Punct}
[:space:]All whitespace characters, including line breaks[ \t\r\n\v\f][\p{Z}\t\r\n\v\f]\s\p{Space}
[:upper:]Uppercase letters[A-Z]\p{Lu}\u\p{Upper}
[:word:]Word characters (letters, numbers and underscores)[A-Za-z0-9_][\p{L}\p{Nl}
\p{Nd}\p{Pc}]
\w\p{IsWord}
[Smilie: :xdigit:]Hexadecimal digits[A-Fa-f0-9][A-Fa-f0-9]\p{XDigit}
POSIXDescriptionASCIIUnicodeShorthandJava

Infosource

Kategorie(n): Bash, IT Syntax, Posix, Shell

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.