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
Last revision Both sides next revision
vba:cast:cregexp [07.10.2014 16:06:15]
yaslaw [[VBA] cRegExp()]
vba:cast:cregexp [29.04.2015 11:19:02]
yaslaw
Line 1: Line 1:
 <​const>​ <​const>​
-    version=2.0.0 +    version=2.1.0 
-    vdate=04.09.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() ====== 
-<​code>​Version %%version%% (%%vdate%%)</​code>​+//Schnelles erstellen eines RegExp-Obektes mit erweiterten Pattern (Patterns erweitert um die Settings von RegExp).//​ 
 + 
 +==Version %%version%% (%%vdate%%)==
  
 Diese Funktion erstellt aus einem Pattern direkt ein %%RegExp%%-Objekt. Das erspart im Code immer ein Mehrzeiler zu generieren um ein %%RegExp%%-Objekt mit allen Settings zu bekommen. Diese Funktion erstellt aus einem Pattern direkt ein %%RegExp%%-Objekt. Das erspart im Code immer ein Mehrzeiler zu generieren um ein %%RegExp%%-Objekt mit allen Settings zu bekommen.
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 138: Line 140:
  
 ===== Code ===== ===== Code =====
 +==== Originalcode ====
 +{{:​vba:​cast:​cast_cregexp.bas|Download %%fname%% (V-%%version%%)}}
 <source '​%%fpath%%/​%%fname%%'​ vb> <source '​%%fpath%%/​%%fname%%'​ vb>
 +==== 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]].
 +\\ 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>'/​**
 +' * 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
 +    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]))*$"​
 +    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))
 +End Function</​code>​
vba/cast/cregexp.txt · Last modified: 29.04.2015 11:19:24 by yaslaw