tuple_regexp_matchtuple_regexp_matchTupleRegexpMatchTupleRegexpMatchtuple_regexp_match (Operator)

Name

tuple_regexp_matchtuple_regexp_matchTupleRegexpMatchTupleRegexpMatchtuple_regexp_match — Extrahieren von Teilen aus Zeichenketten mit Hilfe von regulären Ausdrücken.

Signatur

tuple_regexp_match( : : Data, Expression : Matches)

Herror tuple_regexp_match(const char* Data, const char* Expression, char* Matches)

Herror T_tuple_regexp_match(const Htuple Data, const Htuple Expression, Htuple* Matches)

void TupleRegexpMatch(const HTuple& Data, const HTuple& Expression, HTuple* Matches)

HTuple HTuple::TupleRegexpMatch(const HTuple& Expression) const

static void HOperatorSet.TupleRegexpMatch(HTuple data, HTuple expression, out HTuple matches)

HTuple HTuple.TupleRegexpMatch(HTuple expression)

def tuple_regexp_match(data: MaybeSequence[str], expression: MaybeSequence[str]) -> Sequence[str]

def tuple_regexp_match_s(data: MaybeSequence[str], expression: MaybeSequence[str]) -> str

Beschreibung

tuple_regexp_matchtuple_regexp_matchTupleRegexpMatchTupleRegexpMatchTupleRegexpMatchtuple_regexp_match wendet den regulären Ausdruck ExpressionExpressionExpressionExpressionexpressionexpression auf eine oder mehrere Zeichenketten in DataDataDataDatadatadata an und liefert jeweils die erste dem Suchmuster entsprechende Teilzeichenkette in MatchesMatchesMatchesMatchesmatchesmatches zurück. In der Regel wird eine Ausgabezeichenkette pro Eingabezeichenkette zurückgegeben, wobei die Zeichenketten leer sind, wenn keine Übereinstimmung gefunden wurde. Falls der reguläre Ausdruck jedoch Gruppen mit Teilergebnissen (siehe unten) enthält, hängt das Verhalten von der Anzahl der Eingabezeichenketten ab: Gibt es nur eine Eingabe, so ist das Ergebnis das Tupel aller Teilzeichenketten, die dem Suchmuster einer Gruppe entsprechen. Gibt es mehrere Eingaben, so wird für jede Eingabe das Ergebnis der ersten Gruppe zurückgegeben.

Eine Zusammenfassung der Syntax regulärer Ausdrücke folgt. Grundsätzlich steht jedes Zeichen im Suchmuster als Literal für ein entsprechendes Zeichen in den Eingabedaten, wobei jedoch die nachfolgend aufgeführten Symbole eine spezielle Bedeutung haben (die beschriebene Syntax ist kompatibel zu Perl):

Steht für den Anfang der Zeichenkette
$ Steht für das Ende der Zeichenkette, ggf. inklusive einem Newline als letztes Zeichen
. Steht für jedes Zeichen außer Newline
[...] Steht für jedes in den eckigen Klammern aufgeführte Literal.
Ist das erste Zeichen ein ' ', so ist der Ausdruck negiert. Mit dem Zeichen '-' kann man Wertebereiche angeben wie in [A-Z0-9]. Andere Zeichen verlieren ihre spezielle Bedeutung innerhalb eckiger Klammern, außer ' '. Innerhalb der eckigen Klammern können die folgenden POSIX Zeichenklassen verwendet werden (dabei ist zu beachten, dass die eckigen Klammern um den Klassennamen zusätzlich angegeben werden müssen):
[:alnum:] Ziffern und Buchstaben
[:alpha:] Buchstaben
[:blank:] Leerzeichen und Tab
[:cntrl:] Steuerzeichen
[:digit:] Ziffern
[:graph:] Alle druckbaren Zeichen ohne Leerzeichen
[:lower:] Kleinbuchstaben
[:print:] Alle druckbaren Zeichen einschließlich Leerzeichen
[:punct:] Interpunktionszeichen
[:space:] Alle Whitespace-Zeichen ([:blank:], Zeilenumbrüche, ...)
[:upper:] Großbuchstaben
[:xdigit:] Für Hexadezimalzahlen verwendete Buchstaben und Ziffern (0-9a-fA-F).
* Erlaubt 0 oder mehr Wiederholungen des vorhergehenden Literals / Gruppe
+ Erlaubt 1 oder mehr Wiederholungen des vorhergehenden Literals / Gruppe
? Erlaubt 0 oder 1 Wiederholung des vorhergehenden Literals / Gruppe
Erlaubt n bis m Wiederholungen des vorhergehenden Literals / Gruppe
Erlaubt genau n Wiederholungen des vorhergehenden Literals / Gruppe
| Trennt alternative Suchausdrücke
() Gruppiert einen Unterausdruck und speichert ein Teilergebnis.
(?: ) Reine Gruppierung (z.B. für Wiederholungen) ohne Teilergebnis.
(?= ) Positive Vorausschau (lookahead, notwendige Bedingung rechts vom Match)
(?! ) Negative Vorausschau (lookahead, unerlaubte Bedingung rechts vom Match)
(?<= ) Positive Rückschau (lookbehind, notwendige Bedingung links vom Match)
(?<! ) Negative Rückschau (lookbehind, unerlaubte Bedingung links vom Match)
Escape-Zeichen, erlaubt die Verwendung eines Symbols mit spezieller Bedeutung als Literal.
Achtung: Manche Sprachen wie HDevelop und C/C++ verwenden den Backslash bereits als allgemeines Escape-Zeichen für Zeichenketten. In diesem Fall steht '\.'"\.""\.""\.""\.""\." für ein Punktliteral und '\\'"\\""\\""\\""\\""\\" für ein Backslashliteral. Darüber hinaus gibt es einige Sequenzen mit spezieller Bedeutung:
Steht für Ziffern (Negation: )
Steht für Ziffern, Buchstaben und Unterstrich (Negation: )
Steht für Leerraum (Whitespace) (Negation: )
Steht für eine Wortgrenze (Negation: )

Die in obiger Tabelle gelisteten Wiederholungsquantifikatoren sind im Normalfall "gierig", d.h. es wird die maximal mögliche Übereinstimmung gesucht. Mit einem zusätzlichen '?' wird die minimale Übereinstimmung gesucht, z.B. '+?'.

Falls der angegebene Ausdruck syntaktisch inkorrekt ist, wird als Fehler ein falscher Wert im Steuerparameter 2 bemängelt. Zusätzliche Informationen erhält man in einem Benachrichtigungsfenster, wenn set_system('do_low_error','true')set_system("do_low_error","true")SetSystem("do_low_error","true")SetSystem("do_low_error","true")SetSystem("do_low_error","true")set_system("do_low_error","true") gesetzt ist, oder aber in der Ausgabekonsole von HDevelop.

Weiterhin lassen sich einige Optionen setzen, indem man für ExpressionExpressionExpressionExpressionexpressionexpression ein Tupel übergibt. In diesem Fall wird das erste Element als regulärer Ausdruck behandelt, und jedes weitere Element als Option.

Für allgemeine Informationen zu String-Operationen siehe auch Tupel / String-Operationen.

Falls der Eingabeparameter DataDataDataDatadatadata ein leeres Tupel ist, gibt der Operator ein leeres Tupel zurück. Wenn ExpressionExpressionExpressionExpressionexpressionexpression ein leeres Tupel ist, wird ein Fehler zurückgegeben.

Unicode Codepoints versus Bytes

Die Auswertung der regulären Ausdrücke berücksichtigt Unicode Codepoints. Ein Codepoint kann aus mehreren Bytes im UTF-8 String zusammengesetzt sein. Wenn die Auswertung der regulären Ausdrücke sich auf die Bytes des Strings beziehen soll, kann dieser Operator mit set_system('tsp_tuple_string_operator_mode','byte')set_system("tsp_tuple_string_operator_mode","byte")SetSystem("tsp_tuple_string_operator_mode","byte")SetSystem("tsp_tuple_string_operator_mode","byte")SetSystem("tsp_tuple_string_operator_mode","byte")set_system("tsp_tuple_string_operator_mode","byte") in einen Byte-Modus umgeschaltet werden. Wenn 'filename_encoding'"filename_encoding""filename_encoding""filename_encoding""filename_encoding""filename_encoding" auf 'locale'"locale""locale""locale""locale""locale" gesetzt ist (legacy), verwendet dieser Operator immer den Byte-Modus.

HDevelop Inline-Operation

HDevelop unterstützt eine Inline-Operation für tuple_regexp_matchtuple_regexp_matchTupleRegexpMatchTupleRegexpMatchTupleRegexpMatchtuple_regexp_match, die innerhalb eines Ausdrucks in der folgenden Syntax verwendet werden kann:

Matches := regexp_match(Data, Expression)

Ausführungsinformationen

Parameter

DataDataDataDatadatadata (input_control)  string(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Eingabezeichenketten, auf die das Suchmuster angewendet wird

ExpressionExpressionExpressionExpressionexpressionexpression (input_control)  string(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Regulärer Ausdruck.

Defaultwert: '.*' ".*" ".*" ".*" ".*" ".*"

Wertevorschläge: '.*'".*"".*"".*"".*"".*", 'ignore_case'"ignore_case""ignore_case""ignore_case""ignore_case""ignore_case", 'multiline'"multiline""multiline""multiline""multiline""multiline", 'dot_matches_all'"dot_matches_all""dot_matches_all""dot_matches_all""dot_matches_all""dot_matches_all", 'newline_lf'"newline_lf""newline_lf""newline_lf""newline_lf""newline_lf", 'newline_crlf'"newline_crlf""newline_crlf""newline_crlf""newline_crlf""newline_crlf", 'newline_cr'"newline_cr""newline_cr""newline_cr""newline_cr""newline_cr"

MatchesMatchesMatchesMatchesmatchesmatches (output_control)  string(-array) HTupleSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Dem Suchmuster entsprechende Teilzeichenketten

Beispiel (HDevelop)

tuple_regexp_match ('abba', 'a*b*', Result)
* Returns 'abb'

tuple_regexp_match ('abba', 'b*a*', Result)
* Returns 'a'

tuple_regexp_match ('abba', 'b+a*', Result)
* Returns 'bba'

tuple_regexp_match ('abba', '.a', Result)
* Returns 'ba'

tuple_regexp_match ('abba', '[ab]*', Result)
* Returns 'abba'

tuple_regexp_match (['img123','img124'], 'img(.*)', Result)
* Returns ['123','124']

tuple_regexp_match ('mydir/img001.bmp', 'img(.*)\\.(.*)', Result)
* Returns ['001','bmp']

Alternativen

tuple_strstrtuple_strstrTupleStrstrTupleStrstrTupleStrstrtuple_strstr

Siehe auch

tuple_regexp_replacetuple_regexp_replaceTupleRegexpReplaceTupleRegexpReplaceTupleRegexpReplacetuple_regexp_replace, tuple_regexp_testtuple_regexp_testTupleRegexpTestTupleRegexpTestTupleRegexpTesttuple_regexp_test, tuple_regexp_selecttuple_regexp_selectTupleRegexpSelectTupleRegexpSelectTupleRegexpSelecttuple_regexp_select

Literatur

Perl Compatible Regular Expressions (PCRE), http://www.pcre.org/

Modul

Foundation