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 [01.12.2014 11:20:41]
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>'/​**
-' * Dies ist die Minimalversion von cRegExp ​(V2.1.0): ​http://​wiki.yaslaw.info/​dokuwiki/​doku.php/​vba/​cast/​cregexp+' * Dies ist die Minimalversion von cRegExp 
 +' * http://​wiki.yaslaw.info/​dokuwiki/​doku.php/​vba/​cast/​cregexp#​abgespeckte_version 
 +' * mögliche Delemiter: @&​!/​~#​=\| 
 +' * 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 cRx(ByVal iPattern As String) As Object Private Function cRx(ByVal iPattern As String) As Object
-    Static rxP As Object+    Static rxP As Object:       Set cRx = CreateObject("​VBScript.RegExp"​)
     If rxP Is Nothing Then:     Set rxP = CreateObject("​VBScript.RegExp"​):​ rxP.pattern = "​^([@&​!/​~#​=\|])?​(.*)\1(?:​([Ii])|([Gg])|([Mm]))*$"​     If rxP Is Nothing Then:     Set rxP = CreateObject("​VBScript.RegExp"​):​ rxP.pattern = "​^([@&​!/​~#​=\|])?​(.*)\1(?:​([Ii])|([Gg])|([Mm]))*$"​
-    Dim sm As Object: ​          Set cRx = CreateObject("​VBScript.RegExp"​): ​Set sm = rxP.execute(iPattern)(0).subMatches+    Dim sm As Object: ​          Set sm = rxP.Execute(iPattern)(0).subMatches
     cRx.pattern = sm(1): ​       cRx.IgnoreCase = Not isEmpty(sm(2)): ​      ​cRx.Global = Not isEmpty(sm(3)): ​    ​cRx.Multiline = Not isEmpty(sm(4))     cRx.pattern = sm(1): ​       cRx.IgnoreCase = Not isEmpty(sm(2)): ​      ​cRx.Global = Not isEmpty(sm(3)): ​    ​cRx.Multiline = Not isEmpty(sm(4))
 End Function</​code>​ End Function</​code>​
vba/cast/cregexp.1417429241.txt.gz · Last modified: 01.12.2014 11:20:41 by yaslaw