tuple_regexp_matchtuple_regexp_matchTupleRegexpMatchTupleRegexpMatch (Operator)

Name

tuple_regexp_matchtuple_regexp_matchTupleRegexpMatchTupleRegexpMatch — 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)

Beschreibung

tuple_regexp_matchtuple_regexp_matchTupleRegexpMatchTupleRegexpMatchTupleRegexpMatch wendet den regulären Ausdruck ExpressionExpressionExpressionExpressionexpression auf eine oder mehrere Zeichenketten in DataDataDataDatadata an und liefert jeweils die erste dem Suchmuster entsprechende Teilzeichenkette in MatchesMatchesMatchesMatchesmatches 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 ? Erlaubt 0 oder 1 Wiederholung {n,m} Erlaubt n bis m Wiederholungen {n} Erlaubt genau n Wiederholungen Die obigen 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. +? | 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 Zurückschau (lookbehind, notwendige Bedingung links vom Match) (?<! ) Negative Zurü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 (wobei die groß geschriebene Variante jeweils die Negation darstellt): \d,\D Steht für Ziffern \w,\W Steht für Ziffern, Buchstaben und Unterstrich \s,\S Steht für Leerraum (Whitespace) \b,\B Steht für eine Wortgrenze

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") gesetzt ist, oder aber in der Ausgabekonsole von HDevelop.

Weiterhin lassen sich einige Optionen setzen, indem man für ExpressionExpressionExpressionExpressionexpression 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 DataDataDataDatadata ein leeres Tupel ist, gibt der Operator ein leeres Tupel zurück. Wenn ExpressionExpressionExpressionExpressionexpression 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") in einen Byte-Modus umgeschaltet werden. Wenn 'filename_encoding'"filename_encoding""filename_encoding""filename_encoding""filename_encoding" auf '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_matchTupleRegexpMatchTupleRegexpMatchTupleRegexpMatch, die innerhalb eines Ausdrucks in der folgenden Syntax verwendet werden kann:

Matches := regexp_match(Data, Expression)

Ausführungsinformationen

Parameter

DataDataDataDatadata (input_control)  string(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Eingabezeichenketten, auf die das Suchmuster angewendet wird

ExpressionExpressionExpressionExpressionexpression (input_control)  string(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Regulärer Ausdruck.

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

Wertevorschläge: '.*'".*"".*"".*"".*", 'ignore_case'"ignore_case""ignore_case""ignore_case""ignore_case", 'multiline'"multiline""multiline""multiline""multiline", '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_crlf'"newline_crlf""newline_crlf""newline_crlf""newline_crlf", 'newline_cr'"newline_cr""newline_cr""newline_cr""newline_cr"

MatchesMatchesMatchesMatchesmatches (output_control)  string(-array) HTupleHTupleHtuple (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_strstrTupleStrstrTupleStrstrTupleStrstr

Siehe auch

tuple_regexp_replacetuple_regexp_replaceTupleRegexpReplaceTupleRegexpReplaceTupleRegexpReplace, tuple_regexp_testtuple_regexp_testTupleRegexpTestTupleRegexpTestTupleRegexpTest, tuple_regexp_selecttuple_regexp_selectTupleRegexpSelectTupleRegexpSelectTupleRegexpSelect

Literatur

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

Modul

Foundation