Discussion:
Regular Expression Conditionals (?(if)then|else) in VBA?
(too old to reply)
Lazzaroni
2008-10-08 15:46:31 UTC
Permalink
Does the VBScript_RegExp_55.RegExp object support conditionals?

According to http://www.regular-expressions.info/refflavors.html .NET allows
for conditionals using the (?(if)then|else) structure, and I thought that the
VBScript RegExp object used the .NET flavor of RegEx. But when I try to use
it, the object returns an error message.

When I try to do the following:
objRegExp.Pattern = “^(<)?test(?(1)>|)$”
I get the following error message:
Method 'Test' of object 'IRegExp2' failed

I am trying to use RegEx conditionals to ensure that a string with an
opening bracket has a closing bracket. So the RegEx above would accept “test”
or “<test>”, but it would not accept “<test” or “test>”.

I have looked all over for documentation on the VBScript=RegExp_55.RegExp
flavor of RegEx, but have had little success.

Any help would be greatly appreciated.

Thank you.
Lazzaroni
2008-10-08 16:32:18 UTC
Permalink
http://msdn.microsoft.com/en-us/library/1400241x(VS.85).aspx

That's a link to the Regular Expression Syntax for VBScript. It appears that
conditionals are not supported.

Too bad. That would have been incredibly useful.
Ron Rosenfeld
2008-10-08 17:43:35 UTC
Permalink
On Wed, 8 Oct 2008 08:46:31 -0700, Lazzaroni
Post by Lazzaroni
Does the VBScript_RegExp_55.RegExp object support conditionals?
According to http://www.regular-expressions.info/refflavors.html .NET allows
for conditionals using the (?(if)then|else) structure, and I thought that the
VBScript RegExp object used the .NET flavor of RegEx. But when I try to use
it, the object returns an error message.
objRegExp.Pattern = “^(<)?test(?(1)>|)$”
Method 'Test' of object 'IRegExp2' failed
I am trying to use RegEx conditionals to ensure that a string with an
opening bracket has a closing bracket. So the RegEx above would accept “test”
or “<test>”, but it would not accept “<test” or “test>”.
I have looked all over for documentation on the VBScript=RegExp_55.RegExp
flavor of RegEx, but have had little success.
Any help would be greatly appreciated.
Thank you.
The VBScript regex object uses the Javascript flavor.
--ron
Lazzaroni
2008-10-08 19:09:02 UTC
Permalink
Ron:

Too bad it doesn't use the .NET flavor, which is much more robust.

Thanks.
Ron Rosenfeld
2008-10-08 20:53:39 UTC
Permalink
On Wed, 8 Oct 2008 12:09:02 -0700, Lazzaroni
Post by Lazzaroni
Too bad it doesn't use the .NET flavor, which is much more robust.
Thanks.
I'm not sure exactly what you want to do, but

"<test>|(^|[^<])test(?!>)"

might match what you wrote for a specific string, so long as it doesn't include
embedded delimiters.

--ron

Rick Rothstein
2008-10-08 17:50:42 UTC
Permalink
Without using regular expressions, does this do what you want?

If Variable Like "[!<]*[!>]" or Variable Like "<*>" Then
--
Rick (MVP - Excel)
Post by Lazzaroni
Does the VBScript_RegExp_55.RegExp object support conditionals?
According to http://www.regular-expressions.info/refflavors.html .NET allows
for conditionals using the (?(if)then|else) structure, and I thought that the
VBScript RegExp object used the .NET flavor of RegEx. But when I try to use
it, the object returns an error message.
objRegExp.Pattern = “^(<)?test(?(1)>|)$”
Method 'Test' of object 'IRegExp2' failed
I am trying to use RegEx conditionals to ensure that a string with an
opening bracket has a closing bracket. So the RegEx above would accept “test”
or “<test>”, but it would not accept “<test” or “test>”.
I have looked all over for documentation on the VBScript=RegExp_55.RegExp
flavor of RegEx, but have had little success.
Any help would be greatly appreciated.
Thank you.
Lazzaroni
2008-10-08 19:06:17 UTC
Permalink
Rick:

That is correct, but within a larger string. I am looking for unclosed
brackets using a data validation application that uses rules written in
RegEx. It checks the contents of cells in Excel, based on a unique column
identifier.

Thanks.

Thomas
Rick Rothstein
2008-10-08 19:22:17 UTC
Permalink
Okay, but if I understand your larger goal (checking to ensure multiple
left/right brackets in a text string are paired), this (again, non-RegEx)
code might work for you...

If UBound(Split(Variable, "<")) = UBound(Split(Variable, ">")) And _
Not Variable Like "*<[!>]<*" And Not Variable Like "*<[!>]<*" Then
--
Rick (MVP - Excel)
Post by Lazzaroni
That is correct, but within a larger string. I am looking for unclosed
brackets using a data validation application that uses rules written in
RegEx. It checks the contents of cells in Excel, based on a unique column
identifier.
Thanks.
Thomas
Loading...