User Tools

Site Tools


vba:tutorials:regexptest

[VBA] RegExp testen im Direktfenster

Einfaches Testen und Entwerfen von Regulären Pattern im Direktfenster.

Um reguläre Ausdrücke zu erstellen, muss ich immer diverse Proberunden machen, bis sie wirklich das ausgeben, was ich haben will. Dazu verwende ich meine 2 Funktionen cRegExp() und print_r(). Mit diesen Zwei in Kombination lässt sich einfach im Direktfenster die Resultate eines RegExp testen.

cRegExp() akzeptiert analog zu PHP Patterns inklusive Modifiers.

Neu. Seit print_r() Version 2.10.0 sind beide Funktion in der Methode dRx() zusammengefasst.

Patterns bei cRegExp()

Zum Einen muss man natürlich die Regulären Ausdrücke von VBA kennen. Die Seite die mir dabei immer wieder hilft, ist die offizielle Seite von Microsoft Regular Expression Syntax (Scripting) ff.

Zum Anderen natürlich, dass man die Ausdrücke inklusive der Modifiers im Pattern unterbringen kann.

Pattern inkl. Modifiers

Die Suchstrings können als Reguläre Ausdrücke daherkommen. Dazu müssen sie wie in PHP für preg_match() mittels Delemiter und Modifiers formatiert werden.

[Delemiter][Regulärer Ausdruck][Delemiter][Modifiers]

Delemiter

Als Delemiter können die folgenden Zeichen verwendet werden

@&!/~#=|

Modifiers

Es gibt 3 Modifier.Genau soviele wie die RegExp-Klasse Properties hat. Die Grosskleinschreibung wird nicht berücksichtig. Ebensowenig die Reihenfolge.

  • i IgnoreCase
  • g Global
  • m Multiline

Damit kann man die ganzen Settings in eine Ziele schreiben. ALso genau dass, was wir brauchen um im Direktfenster zu üben.

Mittels print_r() kann zudem das Resultat von RegExp.execute() ausgegeben werden. Somit habe ich alles zusammen, was ich brauche um das Verhalten eines Patterns zu testen.

'Der Pattern ^([^\d]*[\.a-z])\s*(.*) mit dem Modifier IgnoreCase
print_r cregexp("/^([^\d]*[\.a-z])\s*(.*)/i").execute("Haupt-Str. 11a")
<IMatchCollection2>  (
    [0] => <IMatch2>  (
        [Match] => <String> 'Haupt-Str. 11a'
        [FirstIndex] => <Long> 0
        [SubMatches] => <ISubMatches>  (
            [0] => <String> 'Haupt-Str.'
            [1] => <String> '11a'
        )
    )
)
 
'Mit dRx()
dRx "/^([^\d]*[\.a-z])\s*(.*)/i", "Haupt-Str. 11a"
<IMatchCollection2>  (
    [0] => <IMatch2>  (
        [Match] => <String> 'Haupt-Str. 11a'
        [FirstIndex] => <Long> 0
        [SubMatches] => <ISubMatches>  (
            [0] => <String> 'Haupt-Str.'
            [1] => <String> '11a'
        )
    )
)
vba/tutorials/regexptest.txt · Last modified: 14.09.2017 11:33:39 by yaslaw