Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Ovid - Microsoft does the regex dance with two left feet

by Ovid (Cardinal)
on Mar 25, 2001 at 03:03 UTC ( #66916=note: print w/ replies, xml ) Need Help??


in reply to Re: Re: CGI/Perl vs. ASP
in thread CGI/Perl vs. ASP

$code_or_die wrote:

Regular expressions (based on perlre) are available now for both VBScript and JScript.
I can't comment about Jscript because I haven't used it, but I have found serious issues with VBScript's regex engine. A regex as simple as "(\d+)(?:\.log)" has repeatedly failed for me because the lookahead keeps generating an "unknown quantifier" error with the lookahead's question mark. Since we're using VBScript 5 in my company, I should be able to use lookaheads.

Plus, no one at my shop has been able to directly access the data captured by parentheses (i.e. with $1, $2, etc.). We've read through the documentation, but to no avail. I have to set the Regexp object to match globally and then loop through the "matches" property in the Regexp object to get to them. This has been consistent on all of our machines. Either this is poor documentation on Microsoft's part, or their regex engine is fundamentally broken.

The result of this is that I have avoided regular expressions in VBScript and gone back to old ways of extracting data. Not fun!

These are clearly bugs, but I'm not expecting MS to figure out what to do anytime soon. Consider the following quote from them where they try to explain what regexes are good for:

For example, if you need to search an entire web site to remove some outdated material and replace some HTML formatting tags, you can use a regular expression to test each file to see if the material or the HTML formatting tags you are looking for exists in that file.
As I well know due to my own painful forays into this area, regexes should not be used to parse HTML. It's one of the more common newbie errors with regexes (along with "how do I match an email address"?). Microsoft has - how astonishing! - taken a great idea, broken it, and then given bad advice on what to do with it.

Cheers,
Ovid

Join the Perlmonks Setiathome Group or just click on the the link and check out our stats.


Comment on Ovid - Microsoft does the regex dance with two left feet
Re: Ovid - Microsoft does the regex dance with two left feet
by $code or die (Deacon) on Mar 25, 2001 at 05:58 UTC
    Funny, I deleted my original "hesitation" about VBScript regular expressions before I posted.

    You're right, a colleague of mine was quite jealous a few weeks back when I showed him regular expressions. He looked pretty happy when he found he could use it in VBScript, but hasn't actually got it working yet.

    Cheers,
    $code or die
    $ perldoc perldoc
Re: Ovid - Microsoft does the regex dance with two left feet
by chipmunk (Parson) on Mar 27, 2001 at 22:42 UTC
    Looking at the documentation for VBScript's pattern property, I don't see any indication that the (?:) syntax is supported in VBScript. I think it makes more sense to use the VBScript reference, rather than perlre, to determine the features of VBScript.

    [BTW, (?:) in Perl is not a lookahead; it's a non-capturing group. Lookahead is (?=) and (?!).]

      chipmunk wrote:
      BTW, (?:) in Perl is not a lookahead; it's a non-capturing group. Lookahead is (?=) and (?!).
      Ugh! Stupid typos. That's what I get for typing things on the fly. Thanks for catching that. Lookaheads are indeed broken in the version of VBScript that we use, but I did have the syntax right in my original code.

      As a side note, this link has the (?:) syntax listed as valid.

      Another side note: I hate typing on a darned European keyboard (or maybe it's French, I don't know). I'm usually a touch typist, but I see now that I glance at the keys more than I realized :)

      The documentation for the pattern property lists an example that sets Global property to true (the /g modifier with a Perl regex). That's the original problem that I had. I still can't find a simple method for obtaining the equivalent of $1 with a regex like /something(\d+).*$/ (no, don't post it here. I don't want people thinking I'm trying to turn this into vbscriptmonks.org :)

      Cheers,
      Ovid

      Join the Perlmonks Setiathome Group or just click on the the link and check out our stats.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://66916]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (3)
As of 2014-12-29 06:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (184 votes), past polls