User Tools

Site Tools


vba:functions:rx:rx_match

First PagePrevious PageBack to overviewNext PageLast Page

[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: [VBA] RegExp Functions (RX-Functins)
Für die Ausgabe der Resultate verwendete ich die Funktion [VBA] 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 Global1) auf True
  • rxIgnorCase Setzt IgnorCase2) 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")
<IMatchCollection2> (
    [0] => <IMatch2> (
        [Match] => <String> '6.50CHF'
        [0] => <String> '6'
        [1] => <String> '50'
    )
    [1] => <IMatch2> (
        [Match] => <String> '3.50CHF'
        [0] => <String> '3'
        [1] => <String> '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)
<IMatchCollection2> (
    [0] => <IMatch2> (
        [Match] => <String> '6.50chf'
        [0] => <String> '6'
        [1] => <String> '50'
    )
)

Und zulezt noch ein Beispiel, wenn es keine Treffer gibt

print_r rx_match("(\d+)", "Hallo Welt")
<Nothing>

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
rx_match.bas
'/**
' * 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
vba/functions/rx/rx_match.txt · Last modified: 11.02.2014 00:27:46 (external edit)