This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
vba:cast:cregexp [01.12.2014 11:20:15] yaslaw |
vba:cast:cregexp [29.04.2015 11:19:24] (current) yaslaw |
||
---|---|---|---|
Line 6: | Line 6: | ||
fpath=/vba/cast | fpath=/vba/cast | ||
</const> | </const> | ||
- | ====== [VBA] cRegExp() ====== | + | ====== [VBA] cRegExp(), cRx() ====== |
+ | //Schnelles erstellen eines %%RegExp%%-Obektes mit erweiterten Pattern (Patterns erweitert um die Settings von %%RegExp%%).// | ||
==Version %%version%% (%%vdate%%)== | ==Version %%version%% (%%vdate%%)== | ||
Line 13: | Line 15: | ||
{{:vba:cast:cast_cregexp.bas|Download %%fname%% (V-%%version%%)}} | {{:vba:cast:cast_cregexp.bas|Download %%fname%% (V-%%version%%)}} | ||
- | > Für die Ausgabe der Resultate verwendete ich die Funktion [[:vba:functions:print_r | + | |
- | :]]. | + | |
===== Definitionen ===== | ===== Definitionen ===== | ||
- | <code>RegExp= cRegExp(pattern [,flags]) | + | <code>RegExp = cRegExp(pattern [,flags]) |
RegExp = cRegExp(pattern inkl. flags)</code> | RegExp = cRegExp(pattern inkl. flags)</code> | ||
+ | |||
<code vb>Public Function cRegExp( _ | <code vb>Public Function cRegExp( _ | ||
ByVal iPattern As String, _ | ByVal iPattern As String, _ | ||
Line 27: | Line 29: | ||
==== Enumeratoren ==== | ==== Enumeratoren ==== | ||
=== rxFlagsEnum === | === rxFlagsEnum === | ||
- | Dieser Enumerator wird in allen Funktionen verwendet. | ||
<code vb>'/** | <code vb>'/** | ||
' * Wird für die rx_ Funktionen verwendet | ' * Wird für die rx_ Funktionen verwendet | ||
Line 62: | Line 63: | ||
===== Beispiele ===== | ===== Beispiele ===== | ||
+ | > Für die Ausgabe der Resultate verwendete ich die Funktion [[:vba:functions:print_r | ||
+ | :]]. | ||
==== Beispiele mit Paramatern ==== | ==== Beispiele mit Paramatern ==== | ||
Line 139: | Line 141: | ||
===== Code ===== | ===== Code ===== | ||
==== Originalcode ==== | ==== Originalcode ==== | ||
+ | {{:vba:cast:cast_cregexp.bas|Download %%fname%% (V-%%version%%)}} | ||
<source '%%fpath%%/%%fname%%' vb> | <source '%%fpath%%/%%fname%%' vb> | ||
- | ==== Abgespeckte Version ==== | + | ==== Abgespeckte Version cRx() ==== |
- | Häufig kopiere ich die folgenden Zeilen als Library in ein Modul oder Klasse um sie Selbständig zu machen. Siehe auch [[#sinnvolle anwendung]] | + | Häufig kopiere ich die folgenden Zeilen als Library in ein Modul oder Klasse um sie Selbständig zu machen. Siehe auch [[#sinnvolle anwendung]]. |
+ | \\ Die folgende Version ist analog zu vielen JQuery-Scripten die min-Version. Sprich, es ist dasseleb wie die Haubtversion, jedoch so kompakt dass es nicht mehr einfach lesbar ist. Dafür bläht es den Code nicht so stark auf, wenn man die Funktion in ein weiteres Modul packt. | ||
<code vb>'/** | <code vb>'/** | ||
- | ' * Erstellt ein RegExp-Object mit den Grundeinstellungen | + | ' * Dies ist die Minimalversion von cRegExp |
- | ' * V2.0.1 | + | ' * http://wiki.yaslaw.info/dokuwiki/doku.php/vba/cast/cregexp#abgespeckte_version |
- | ' * @param String Pattern mit Delmiter und igm-Parametern | + | ' * mögliche Delemiter: @&!/~#=\| |
- | ' * @return RegExp | + | ' * mögliche Modifiers: g (Global), i (IgnoreCode, m (Mulitline) |
+ | ' * | ||
+ | ' * @example myRx = cRx("/([a]{2,})/i") 'Finde alle folgen von a. Flag:IgnoreCase | ||
+ | ' * @version 2.1.0 (01.12.2014) | ||
+ | ' * @param String Pattern mit Delimiter und Modifier analog zu PHP | ||
+ | ' * @return Object RegExp-Object | ||
' */ | ' */ | ||
- | Private Function cRegExp(ByVal iPattern As String) As Object | + | Private Function cRx(ByVal iPattern As String) As Object |
- | Static rxP As Object 'RegExpo um iPattern aufzubrechen | + | Static rxP As Object: Set cRx = CreateObject("VBScript.RegExp") |
- | If rxP Is Nothing Then | + | If rxP Is Nothing Then: Set rxP = CreateObject("VBScript.RegExp"): rxP.pattern = "^([@&!/~#=\|])?(.*)\1(?:([Ii])|([Gg])|([Mm]))*$" |
- | Set rxP = CreateObject("VBScript.RegExp") | + | Dim sm As Object: Set sm = rxP.Execute(iPattern)(0).subMatches |
- | rxP.pattern = "^([@&!/~#=\|])(.*)\1(?:([Ii])|([Gg])|([Mm]))*$" | + | cRx.pattern = sm(1): cRx.IgnoreCase = Not isEmpty(sm(2)): cRx.Global = Not isEmpty(sm(3)): cRx.Multiline = Not isEmpty(sm(4)) |
- | End If | + | |
- | Set cRegExp = CreateObject("VBScript.RegExp") 'Neuer RegExp erstellen | + | |
- | If Not rxP.Test(iPattern) Then cRegExp.pattern = iPattern: Exit Function 'Falls es ein einfacher Pattern ist, diesen übernehmen und die Func verlassen | + | |
- | Dim parts As Object: Set parts = rxP.execute(iPattern)(0).subMatches 'Pattern zerlegen. 0) Delemiter, 1) Pattern, 2) - 4) Paramters | + | |
- | cRegExp.IgnoreCase = Not isEmpty(parts(2)) | + | |
- | cRegExp.Global = Not isEmpty(parts(3)) | + | |
- | cRegExp.Multiline = Not isEmpty(parts(4)) | + | |
- | cRegExp.pattern = parts(1) | + | |
End Function</code> | End Function</code> |