Attribute VB_Name = "regexp" 'http://stackoverflow.com/questions/4556910/how-do-i-get-regex-support-in-excel-via-a-function-or-custom-function '---------------------------------------------------------------------------------------vv ' Procedure : RegEx ' Author : Mike ' Date : 9/1/2010 ' Purpose : Perform a regular expression search on a string and return the first match ' or the null string if no matches are found. ' Usage : If Len(RegEx("\d{1,2}[/-]\d{1,2}[/-]\d{2,4}", txt)) = 0 Then MsgBox "No date in " & txt ' : TheDate = RegEx("\d{1,2}[/-]\d{1,2}[/-]\d{2,4}", txt) ' : CUSIP = Regex("[A-Za-z0-9]{8}[0-9]",txt) '--------------------------------------------------------------------------------------- '^^ Function RegEx(Pattern As String, TextToSearch As String) As String 'vv Dim RE As Object, REMatches As Object Set RE = CreateObject("vbscript.regexp") With RE .MultiLine = False .Global = False .IgnoreCase = False .Pattern = Pattern End With Set REMatches = RE.Execute(TextToSearch) If REMatches.Count > 0 Then RegEx = REMatches(0) Else RegEx = vbNullString End If End Function '^^ '--------------------------------------------------------------------------------------- ' Procedure : RegExReplace ' Author : Mike ' Date : 11/4/2010 ' Purpose : Attempts to replace text in the TextToSearch with text and back references ' from the ReplacePattern for any matches found using SearchPattern. ' Notes - If no matches are found, TextToSearch is returned unaltered. To get ' specific info from a string, use RegExExtract instead. ' Usage : ?RegExReplace("(.*)(\d{3})[\)\s.-](\d{3})[\s.-](\d{4})(.*)", "My phone # is 570.555.1234.", "$1($2)$3-$4$5") ' My phone # is (570)555-1234. '--------------------------------------------------------------------------------------- ' Function RegExReplace(SearchPattern As String, TextToSearch As String, ReplacePattern As String, _ Optional GlobalReplace As Boolean = True, _ Optional IgnoreCase As Boolean = False, _ Optional MultiLine As Boolean = False) As String Dim RE As Object Set RE = CreateObject("vbscript.regexp") With RE .MultiLine = MultiLine .Global = GlobalReplace .IgnoreCase = IgnoreCase .Pattern = SearchPattern End With RegExReplace = RE.Replace(TextToSearch, ReplacePattern) End Function '--------------------------------------------------------------------------------------- ' Procedure : RegExExtract ' Author : Mike ' Date : 11/4/2010 ' Purpose : Extracts specific information from a string. Returns empty string if not found. ' Usage : ?RegExExtract("(.*)(\d{3})[\)\s.-](\d{3})[\s.-](\d{4})(.*)", "My phone # is 570.555.1234.", "$2$3$4") ' 5705551234 ' ?RegExExtract("(.*)(\d{3})[\)\s.-](\d{3})[\s.-](\d{4})(.*)", "My name is Mike.", "$2$3$4") ' ' ?RegExReplace("(.*)(\d{3})[\)\s.-](\d{3})[\s.-](\d{4})(.*)", "My name is Mike.", "$2$3$4") ' My name is Mike. '--------------------------------------------------------------------------------------- ' Function RegExExtract(SearchPattern As String, TextToSearch As String, PatternToExtract As String, _ Optional GlobalReplace As Boolean = True, _ Optional IgnoreCase As Boolean = False, _ Optional MultiLine As Boolean = False) As String Dim MatchFound As Boolean MatchFound = Len(RegEx(SearchPattern, TextToSearch)) > 0 If MatchFound Then RegExExtract = RegExReplace(SearchPattern, TextToSearch, PatternToExtract, _ GlobalReplace, IgnoreCase, MultiLine) Else RegExExtract = vbNullString End If End Function ' =RegExExtract(".*sort=([0-9])&.*",D2,"$1") '=RegExExtract(".*use_mailbox_cache=([0-9])&.*",D2,"$1") '=RegExExtract(".*mailbox=([a-zA-Z0-9._-]*)&.*",D2,"$1") '=RegExExtract(".*PG_SHOWALL=([0-9]*)&.*",D2,"$1") '=IF(LEN(RegEx("(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1)$",C20190))>0,1,0) '=RegExExtract("\/webmail\/src\/([a-z_]*)\.php.*",D20190,"$1")