[<>] ====== [VBA] rx_match() ====== Diese Funktion wendet ein Pattern auf ein String an und gibt die Resultate als MatchCollection zurück >Übersicht über alle rx-Funktionen: [[..:rx:]] >Für die Ausgabe der Resultate verwendete ich die Funktion [[:vba:functions:print_r:]] ===== Definition ===== Public Function rx_match( _ ByVal iPattern As String, _ ByVal iSubject As String, _ Optional ByVal iFlags As rxFlagsEnum = rxGlobal + rxIgnorCase _ ) As MatchCollection ==== Parameterliste ==== ***iPattern** Pattern analog RegExp ***iSubject** Der String der bearbeitet werden soll ***//iFlags//** Eigenschaften von Regexp. Global, IgnoreCase und Multiline. Die Eigenschaften können mit + kombiniert werden ==== Enumeratoren ==== === rxFlagsEnum === Setzte die Flags für das RegExp Object. Für das genaue Verhalten bitte die VB-Doku zur RegExp Klasse studieren ***rxNone** Alle Parameter werden auf False gesetzt. Wird vor allem zum überschreiben des Standards gebraucht. ***rxGlobal** Setzt Global(([[http://msdn.microsoft.com/en-us/library/tdte5kwf(v=vs.84).aspx|Global Property auf MSDN]])) auf True ***rxIgnorCase** Setzt IgnorCase(([[http://msdn.microsoft.com/en-us/library/wy1d4bz3(v=vs.84).aspx|IgnorCase Property auf MSDN]])) auf True ***rxMultiline** Setzt Multiline auf True ===== Anwendungsbeispiele ===== Standart ist mit %%IgnoreCase%% + Global print_r rx_match("(\d+)\.(\d+)CHF", "Die Wurst kostet 6.50CHF und das Steak 3.50CHF") ( [0] => ( [Match] => '6.50CHF' [0] => '6' [1] => '50' ) [1] => ( [Match] => '3.50CHF' [0] => '3' [1] => '50' ) ) Nur mit %%IgnoreCase%%. Es wird nur der erste Treffer ausgegeben, da Global auf false ist print_r rx_match("(\d+)\.(\d+)CHF", "Die Wurst kostet 6.50chf und das Steak 3.50CHF", rxIgnorCase) ( [0] => ( [Match] => '6.50chf' [0] => '6' [1] => '50' ) ) Und zulezt noch ein Beispiel, wenn es keine Treffer gibt print_r rx_match("(\d+)", "Hallo Welt") ===== Code ===== Der Enumerator rxFlagsEnum wird für alle rx-Funktionen verwendet. '/** ' * Wird für die rx_ Funktionen verwendet ' * Setzte die Flags für das RegExp Object ' */ Public Enum rxFlagsEnum rxnone = 0 rxGlobal = 2 ^ 0 rxIgnorCase = 2 ^ 1 rxMultiline = 2 ^ 2 End Enum '/** ' * Copyright mpl by ERB software | http://wiki.yaslaw.info ' * ' * Die Idee hatte ich aus PHP. Ein Befehl um ein Reguläreren Ausdruck direkt auszuwerten ' * @example Set mc = rx_match("([\d\.]+)", "3 Würste unf 4.5 Liter Wasser", pfGlobal) ' * @param String Pattern analog RegExp ' * @param String Der String der bearbeitet werden soll ' * @param rxFlagsEnum Eigenschaften von Regexp. Global, IgnoreCase und Multiline. ' * Die Eigenschaften können mit + kombiniert werden ' * @return MatchCollection oder Nothing wenn keine übereinstimmung vorhanden ist ' */ Public Function rx_match( _ ByVal iPattern As String, _ ByVal iSubject As String, _ Optional ByVal iFlags As rxFlagsEnum = rxglobal + rxIgnorCase _ ) As Object 'Dim rx As New regExp Dim rx As Object: Set rx = CreateObject("VBScript.RegExp") rx.Global = iFlags And rxglobal rx.IgnoreCase = iFlags And rxIgnorCase rx.Multiline = iFlags And rxMultiline rx.Pattern = iPattern If rx.test(iSubject) Then Set rx_match = rx.execute(iSubject) End If Set rx = Nothing End Function {{tag>vba:Functions vba:RegExp VBA}}