Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
regular_expressions [2015/06/02 08:49] – [sed] olli | regular_expressions [2024/09/13 06:42] (aktuell) – [PHP (PCRE)] olli |
---|
====== Regular Expressions ====== | ====== Regular Expressions ====== |
Eine Regular Expression (abgekürzt RegExp, oder RegEx) ist eine Zeichenkette, die eine Mengen von Zeichenketten mit Hilfe von syntaktischen Regeln beschreibt. | Eine Regular Expression (abgekürzt RegExp, oder RegEx) ist eine Zeichenkette, die eine Mengen von Zeichenketten mit Hilfe von syntaktischen Regeln beschreibt. |
| |
| ===== Zeichenauswahl ===== |
| ^RegExp ^Bedeutung^ |
| |''[abc]'' |eines der Zeichen ''a'', ''b'' oder ''c'' | |
| |''[0-2]'' |eine Ziffer von ''0'' bis ''2''| |
| |''[^a]'' |ein beliebiges Zeichen außer ''a''| |
| |
| ==== POSIX-Zeichenklassen ==== |
| ^RegExp ^Bedeutung^ |
| |''[:cntrl:]'' |Steuerzeichen| |
| |''[:print:]'' |Druckbare Zeichen: ''[:alnum:]'', ''[:punct:]'' und Leerzeichen| |
| |''[:space:]'' |Whitespace: Horizontaler und vertikaler Tabulator, Zeilen- und Seitenvorschub, Wagenrücklauf und Leerzeichen| |
| |''[:blank:]'' |Leerzeichen oder Tabulator| |
| |''[: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|nt |
| |''[:upper:]'' |Großbuchstaben| |
| |
| <WRAP info round> |
| Die POSIX-Zeichenklassen müssen innerhalb einer Zeichenauswahl ''[]'' stehen. |
| Beispiel: ''%%[[%%:alnum:%%]]%%'' |
| </WRAP> |
| |
| ===== Quantoren ===== |
| ^RegExp ^Bedeutung^ |
| |''?'' |null- oder einmal| |
| |''+'' |mindestens einmal (entspricht ''{1,}'')| |
| |''*'' |beliebig oft (auch keinmal) (entspricht ''{0,}'')| |
| |''{n}'' |exakt n-mal (entspricht ''{n,n}'')| |
| |''{min,}'' |mindestens min-mal| |
| |''{min,max}'' |mindestens min-mal, max-mal| |
| |''{0,max}'' |maximal max-mal| |
| |
| ===== Spezielle Zeichen ===== |
| ^RegExp ^Bedeutung^ |
| |''.'' |beliebiges Zeichen| |
| |''\'' |Escapezeichen| |
| |''^'' |Zeilenanfang| |
| |''$'' |Zeilen- oder Stringende| |
| |
| ===== Unicode ===== |
| ^RegExp ^Bedeutung^ |
| |''\p{L}'' |beliebiges Unicodezeichen aus der Kategorie Buchstabe| |
| |''\P{L}'' |beliebiges Unicodezeichen, außer aus der Kategorie Buchstabe| |
| |''\p{n}'' |beliebige Unicodeziffer| |
| |''\P{n}'' |beliebiges Unicodezeichen, außer beliebige Unicodeziffer| |
| |''\uFFFF'' | Unicodezeichen mit dem Codepoint U+FFFF| |
| |
| <WRAP info round> |
| Dies sind nur die häufigsten RegExps für Unicode, für weitere Informationen siehe [[https://www.regular-expressions.info/unicode.html| RegExps für Unicode]]. |
| </WRAP> |
| |
| |
| |
| ===== Gruppen und Backreferences ===== |
| ^RegExp ^Bedeutung^ |
| |''()'' |Gruppe| |
| |''\n'' |Zugriff auf n-te Gruppe| |
| |
| |
Die unterstützen Features unterscheiden sich je nach Implementierung/Sprache. | Die unterstützen Features unterscheiden sich je nach Implementierung/Sprache. |
| |
===== PHP (PCRE) ===== | ===== PHP (PCRE) ===== |
| * Einzelne Unicodezeichen werden nicht als ''\uFFFF'' sondern als ''\x{FFFF}'' kodiert. |
| * Es werden POSIX-Zeichenklassen und "special sequences" unterstützt. |
| <WRAP info round> |
| Seit Version 7.3 nutzt [[PHP]] [[https://php.watch/versions/7.3/pcre2|PCRE2 statt PCRE]]. |
| Dies bringt eine strengere Prüfung der Pattern mit sich. |
| Das sonstige Verhalten soll weitgehend identisch sein. |
| </WRAP> |
| |
* [[https://regex101.com/#php|regular expressions 101 (PHP)]] Tester, erzeugt textuelle Erklärung der Regexp | * [[https://regex101.com/#php|regular expressions 101 (PHP)]] Tester, erzeugt textuelle Erklärung der Regexp |
| |
===== Python ===== | ===== Python ===== |
[[Python]] unterstützt die POSIX-Zeichenklassen wie ''[:alpha:]'' oder ''[:alnum:]'' nicht. | [[Python]] unterstützt die POSIX-Zeichenklassen wie ''[:alpha:]'' oder ''[:alnum:]'' nicht. |
| Dafür kennt Python special sequences: |
| ^special sequence ^Bedeutung ^ |
| |''\d'' |beliebige Ziffer ''[0-9]'' | |
| |''\D'' |beliebiges Zeichen, das keine Ziffer ist | |
| |''\w'' |beliebiges Zeichen aus ''[a-zA-Z0-9_]'' | |
| |''\W'' |beliebiges Zeichen, das nicht in ''[a-zA-Z0-9_]'' enthalten ist| |
| |''\s'' |beliebiges Leerzeichen| |
| |''\S'' |beliebiges Nicht-Leerzeichen| |
| |
* [[http://pythex.org/|Pythex]] Onlinetester mit Cheatsheet | * [[http://pythex.org/|Pythex]] Onlinetester mit Cheatsheet |
* [[https://regex101.com/#python|regular expressions 101 (Python)]] Tester, erzeugt textuelle Erklärung der Regexp | * [[https://regex101.com/#python|regular expressions 101 (Python)]] Tester, erzeugt textuelle Erklärung der Regexp |
| |
| ===== procmail ===== |
| [[procmail]] verwendet eine eigene Implementierung von regulären Ausdrücken. Sie unterstützt die Quantoren vom Typ ''{n,m}'' nicht. |
| |
===== sed ===== | ===== sed ===== |
|''\{i,n\}''|i bis n-mal| | |''\{i,n\}''|i bis n-mal| |
| |
| Auch Gruppen ''()'' müssen escaped werden: ''\(\)''. |
| |
| <WRAP info round> |
| Beim Escaping muss beachtet werden, dass Ausdrücke, die in doppelten Anführungszeichen (''"'') stehen, bereits von der Shell ausgewertet werden. Daher muss ggf. doppelt escaped werden. |
| Ausdrücke, die in einfachen Anführungszeichen (''''') werden von Shells wie [[bash]] dagegen nicht ausgewertet und daher auch nicht doppelt escaped werden. |
| </WRAP> |
===== Links ===== | ===== Links ===== |
* [[http://regexlib.com|Regexlib]] Bibliothek mit Regex | * [[http://regexlib.com|Regexlib]] Bibliothek mit Regex |
| |
| |