User Tools

Site Tools


vba:cast:cregexp

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vba:cast:cregexp [26.11.2014 14:46:07]
yaslaw
vba:cast:cregexp [29.04.2015 11:19:24] (current)
yaslaw
Line 1: Line 1:
 <​const>​ <​const>​
-    version=2.0.1 +    version=2.1.0 
-    vdate=31.10.2014+    vdate=01.12.2014
     fname=cast_cregexp.bas     fname=cast_cregexp.bas
     ns=%NAMESPACE%     ns=%NAMESPACE%
     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 zerlegen0) 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>​
vba/cast/cregexp.1417009567.txt.gz · Last modified: 26.11.2014 14:46:07 by yaslaw