The RexExp Object
The
RegExp object has three properties and three methods. The properties
are:
- Pattern property - holds the regular expression pattern
- Global property - True or False (default False). If False, matching stops
at first match.
- IgnoreCase property - True or False (default True). If True, allows case-insensitive
matching
The methods are:
- Execute method - executes a match against the
specified string. Returns a Matches collection,
which contains a Match object for each match.
The Match object can also contain a SubMatches collection
- Replace method - replaces the part of the string found in a match with
another string
- Test method - executes an attempted match and returns True or False
To set up a
RegExp object:
Dim re
Set re = New RegExp
With re
.Pattern = "some_pattern"
.Global = True
.IgnoreCase = True
End With
A
Pattern can be any string value. For example,
if the
pattern is "Hello
World", the
RegExp object will match that in
the target string. If
IgnoreCase is
True,
it will match any case, so "hellO wORld" would be matched. If
Global is
set to
True,
it will contine to search the string for all instances of "Hello World". If
False, it will stop searching after the first instance
is found.
Execute method, returning Matches collection
Dim re, targetString, colMatch, objMatch
Set re = New RegExp
With re
.Pattern = "a"
.Global = True
.IgnoreCase = True
End With
targetString = "The rain in Spain falls mainly in the plain"
Set colMatch = re.Execute(targetString)
For each objMatch in colMatch
Response.Write objMatch.Value & "<br />"
Next
The above will produce a list of 5 letter a's.
Test method, returning True or False
Dim re, targetString
Set re = New RegExp
With re
.Pattern = "a"
.Global = False
.IgnoreCase = False
End With
targetString = "The rain in Spain falls mainly in the plain"
re.Test(targetString)
The above will return
True as soon as it hits the first instance of "a"
Metacharacters
Metacharacters are special characters that can be combined with literal characters
(which is all that have been used so far) to extend the power of Regular Expressions
way beyond the simple examples already seen, and are what set Regular Expressions
apart from simple string functions.
| Character |
Description |
| \ |
Marks the next character as either a special character
or a literal. For example, "n" matches the character "n". "\n" matches
a newline character. The sequence "\\" matches "\" and "\(" matches "(". |
| ^ |
Matches the beginning of input. |
| $ |
Matches the end of input. |
| * |
Matches the preceding character zero or more times. For
example, "zo*" matches either "z" or "zoo". |
| + |
Matches the preceding character one or more times. For
example, "zo+" matches "zoo" but not "z". |
| ? |
Matches the preceding character zero or one time. For
example, "a?ve?" matches the "ve" in "never". |
| . |
Matches any single character except a newline character. |
| (pattern) |
Matches pattern and remembers the match. The
matched substring can be retrieved from the resulting Matches collection,
using Item [0]...[n]. To match parentheses characters
( ), use "\(" or "\)". |
| x|y |
Matches either x or y. For example, "z|wood" matches "z" or "wood". "(z|w)oo" matches "zoo" or "wood". |
| {n} |
n is a nonnegative integer. Matches exactly n times.
For example, "o{2}" does not match the "o" in "Bob," but matches the
first two o's in "foooood". |
| {n,} |
n is a nonnegative integer. Matches at least n times.
For example, "o{2,}" does not match the "o" in "Bob" and matches all
the o's in "foooood." "o{1,}" is equivalent to "o+". "o{0,}" is equivalent
to "o*". |
| {n,m} |
m and n are nonnegative integers. Matches
at least n and at most m times. For example, "o{1,3}" matches
the first three o's in "fooooood." "o{0,1}" is equivalent to "o?". |
| [xyz] |
A character set. Matches any one of the enclosed characters.
For example, "[abc]" matches the "a" in "plain". |
| [^xyz] |
A negative character set. Matches any character not enclosed.
For example, "[^abc]" matches the "p" in "plain". |
| [a-z] |
A range of characters. Matches any character in the specified
range. For example, "[a-z]" matches any lowercase alphabetic character
in the range "a" through "z". |
| [^m-z] |
A negative range characters. Matches any character not
in the specified range. For example, "[m-z]" matches any character not
in the range "m" through "z". |
| \b |
Matches a word boundary, that is, the position between
a word and a space. For example, "er\b" matches the "er" in "never" but
not the "er" in "verb". |
| \B |
Matches a non-word boundary. "ea*r\B" matches the "ear" in "never
early". |
| \d |
Matches a digit character. Equivalent to [0-9]. |
| \D |
Matches a non-digit character. Equivalent to [^0-9]. |
| \f |
Matches a form-feed character. |
| \n |
Matches a newline character. |
| \r |
Matches a carriage return character. |
| \s |
Matches any white space including space, tab, form-feed,
etc. Equivalent to "[ \f\n\r\t\v]". |
| \S |
Matches any nonwhite space character. Equivalent to "[^ \f\n\r\t\v]". |
| \t |
Matches a tab character. |
| \v |
Matches a vertical tab character. |
| \w |
Matches any word character including underscore. Equivalent
to "[A-Za-z0-9_]". |
| \W |
Matches any non-word character. Equivalent to "[^A-Za-z0-9_]". |
| \num |
Matches num, where num is a positive
integer. A reference back to remembered matches. For example, "(.)\1" matches
two consecutive identical characters. |
| \n |
Matches n, where n is an octal escape
value. Octal escape values must be 1, 2, or 3 digits long. For example, "\11" and "\011" both
match a tab character. "\0011" is the equivalent of "\001" & "1".
Octal escape values must not exceed 256. If they do, only the first
two digits comprise the expression. Allows ASCII codes to be used in
regular expressions. |
| \xn |
Matches n, where n is a hexadecimal
escape value. Hexadecimal escape values must be exactly two digits long.
For example, "\x41" matches "A". "\x041" is equivalent to "\x04" & "1".
Allows ASCII codes to be used in regular expressions. |
Examples
\d+ will match any digit one or more times, and
is the equivalent to [0-9]+
<[^>]*>
will match any html tag, and looks for an opening "<", followed by anything
that isn't a closing block ">", followed finally by a closing block ">". It
uses a "negative character set"
[^>]
Constructing a RegExp pattern
Form input validation is a key area in which regular expressions can be used,
and a common task is to validate the structure of an email address. Initially,
the task needs to be broken down into its constituent rules:
- Must have 1 or more letters or numbers
- Can have underscores, hyphens, dots, apostrophes
- Must have an "@" sign following this
- First part of domain name must follow the "@", and must contain
at least 3 letters or numbers
- May contain underscore, dots or hyphen
- Must be at least one dot, which must be followed by the TLD.
"[\w\-\'\.]+@{1}[\w\.?\-?]{3,}\.[\a-z]+" will
do it, but can be improved upon depending on how specific you want to be.
SubMatches collection
There will be instances where, once a match is found, you want to extract
parts of that match for later use. As an example, suppose you have an html
page which contains a list of links:
<a href="somepage.asp?id=12345">Company A</a><br />
<a href="somepage.asp?id=45678">Company B</a><br />
<a href="somepage.asp?id=66745">Company C</a><br />
<a href="somepage.asp?id=33471">Company D</a><br />
<a href="somepage.asp?id=90765">Company E</a><br />
...
The required parts are the Company name and the id in the
querystring. These need to be collected and inserted into a database,
for example. The html is fed in as the strSearchOn, and the pattern uses
parenthesis to search for each item - The id ([0-9]{5}), which is a 5
digit number, and ([\w\s]+) which collects a series of letters and
spaces, and will stop collecting them when the opening angle bracket is
reached (</a>).
Set objRegExpr = New regexp
objRegExpr.Pattern = "somepage.asp\?id=([0-9]{5})" & chr(34) & ">([\w\s]+)"
objRegExpr.Global = True
objRegExpr.IgnoreCase = True
set colmatches = objRegExpr.Execute(strSearchOn)
For Each objMatch in colMatches
id = objMatch.SubMatches(0)
company = objMatch.SubMatches(1)
sql = "Insert Into table (idfield, company) Values (" & id & ",'" & company & "')"
conn.execute(sql)
Next
This is just a copy from another Author's page with just so very good and easy to understand info:
http://www.mikesdotnetting.com/article/24/regular-expressions-and-vbscript
Thanks Mike