[<>]
====== [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}}