[Regular Expressions]
quote:
Originally posted by |\/|artij|\| in this thread
Regular Expressions in the replace function, TB told me you could only do that in JavaScript. Cookie, you'd do me a very big favor if you could provide a good example of that, thanks.
Related collections and objects for vbscript:
RegExp Object (vbscript 5+):
Properties:
* Global
* IgnoreCase
* Pattern
Methods:
* Execute
* Replace
* Test
Match Object (vbscript 5+):
Properties:
* FirstIndex
* Length
* Value
Matches Collection (vbscript 1+)
SubMatches Collection (vbscript 5.5+)
Example 1:code:
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches ' Create variable.
Set regEx = New RegExp ' Create a regular expression.
regEx.Pattern = patrn ' Set pattern.
regEx.IgnoreCase = True ' Set case insensitivity.
regEx.Global = True ' Set global applicability.
Set Matches = regEx.Execute(strng) ' Execute search.
For Each Match in Matches ' Iterate Matches collection.
RetStr = RetStr & "Match found at position "
RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
RetStr = RetStr & Match.Value & "'." & vbCRLF
Next
RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))
Example 2:code:
Function RegExpTest(patrn, strng)
Dim regEx, retVal ' Create variable.
Set regEx = New RegExp ' Create regular expression.
regEx.Pattern = patrn ' Set pattern.
regEx.IgnoreCase = False ' Set case sensitivity.
retVal = regEx.Test(strng) ' Execute the search test.
If retVal Then
RegExpTest = "One or more matches were found."
Else
RegExpTest = "No match was found."
End If
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))
Example 3:code:
Function ReplaceTest(patrn, replStr)
Dim regEx, str1 ' Create variables.
str1 = "The quick brown fox jumped over the lazy dog."
Set regEx = New RegExp ' Create regular expression.
regEx.Pattern = patrn ' Set pattern.
regEx.IgnoreCase = True ' Make case insensitive.
ReplaceTest = regEx.Replace(str1, replStr) ' Make replacement.
End Function
MsgBox(ReplaceTest("fox", "cat")) ' Ex1: Replace 'fox' with 'cat'.
MsgBox(ReplaceText("(\S+)(\s+)(\S+)", "$3$2$1")) ' Ex2: Swap pairs of words.
Example 4:code:
Function SubMatchTest(inpStr)
Dim oRe, oMatch, oMatches
Set oRe = New RegExp
' Look for an e-mail address (not a perfect RegExp)
oRe.Pattern = "(\w+)@(\w+)\.(\w+)"
' Get the Matches collection
Set oMatches = oRe.Execute(inpStr)
' Get the first item in the Matches collection
Set oMatch = oMatches(0)
' Create the results string.
' The Match object is the entire match - dragon@xyzzy.com
retStr = "Email address is: " & oMatch & vbNewline
' Get the sub-matched parts of the address.
retStr = retStr & "Email alias is: " & oMatch.SubMatches(0) ' dragon
retStr = retStr & vbNewline
retStr = retStr & "Organization is: " & oMatch. SubMatches(1)' xyzzy
SubMatchTest = retStr
End Function
MsgBox(SubMatchTest("Please send mail to dragon@xyzzy.com. Thanks!"))
[Replace Function]
(vbscript 2+)
I've seen in some of the Stuffplug-NG VBS talkers that replacements are done like so:
code:
...some code...
output = Replace(output, "some text", "blah")
output = Replace(output, "Some Text", "blah")
output = Replace(output, "SOME TEXT", "blah")
...some code...
This isn't needed and can be done much shorter and thus much quicker, because the syntax of the function is:
Replace(expression, find, replacewith[, start[, count[, compare]]])
where
expression: Required. String expression containing substring to replace.
find: Required. Substring being searched for.
replacewith: Required. Replacement substring.
start: Optional. Position within expression where substring search is to begin. If omitted, 1 is assumed. Must be used in conjunction with
count.
count: Optional. Number of substring substitutions to perform. If omitted, the default value is -1, which means make all possible substitutions. Must be used in conjunction with
start.
compare: Optional. Numeric value indicating the kind of comparison to use when evaluating substrings. If omitted, the default value is 0, which means perform a binary comparison. 1 means a textual comparison (
case insensitive). Constant
vbBinaryCompare equals 0, and constant
vbTextCompare equals 1.
Example 1:
code:
Dim MyString
' A binary comparison starting at the beginning of the string. Returns "XXYXXPXXY".
MyString = Replace("XXpXXPXXp", "p", "Y")
' A textual comparison starting at the beginning of the string. Returns "XXYXXYXXY".
MyString = Replace("XXpXXPXXp", "p", "Y",,, 1)
' A textual comparison starting at position 4. Returns "XXYXXY".
MyString = Replace("XXpXXPXXp", "p", "Y", 4, -1, 1)
Example 2:
code:
...some code...
output = Replace(output, "some text", "blah",,, 1)
...some code...
Note:
Same syntax is used in Visual Basic and same principal goes for coding in other languages as well...
[Notes]
More examples and info on vbscript in various (official) sources on the net and in various (official) helpfiles...
The following lists the versions of Microsoft Visual Basic Scripting Edition implemented by host applications:
Microsoft Internet Explorer 3.0 => vbscript 1
Microsoft Internet Information Server 3.0 => vbscript 2
Microsoft Internet Explorer 4.0 => vbscript 3
Microsoft Internet Information Server 4.0 => vbscript 3
Microsoft Windows Scripting Host 1.0 => vbscript 3
Microsoft Outlook 98 => vbscript 3
Microsoft Visual Studio 6.0 => vbscript 4
Microsoft Internet Explorer 5.0 => vbscript 5
Microsoft Internet Information Services 5.0 => vbscript 5
Microsoft Internet Explorer 5.5 => vbscript 5.5
Microsoft Visual Studio .NET => vbscript 5.6
http://msdn.microsoft.com/library/default.asp?url.../html/vbstutor.asp