|
Boost Users : |
From: Michael Primeaux (mjprimeaux_at_[hidden])
Date: 2006-03-28 04:51:17
As you suspected, the variable-width negative look-behind was the issue.
The Microsoft .NET Framework 2.0 supports variable width negative
look-behind. Perhaps it's based on your work with GRETA?
Again, I appreciate your time.
Kindest regards,
Michael Primeaux
www.i-dynamics-corporation.com
-----Original Message-----
From: boost-users-bounces_at_[hidden]
[mailto:boost-users-bounces_at_[hidden]] On Behalf Of Eric Niebler
Sent: Tuesday, March 28, 2006 12:49 AM
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] RegEx Exception
Michael Primeaux wrote:
> I'm using the latest version of the boost regex libraries and am
> receiving an exception when using the regex_replace function with the
> following regular expression:
>
> (?i)(?<!')((<\s*OBJECT\s*[^>]+classid="clsid:[^>]+?(?<!\s*/\s*)>[^*]+?
> <\s*/\s*OBJECT\s*>)|(<\s*OBJECT\s*[^>]+classid=\s*\"clsid:[^/>]+/))
>
> ...which works in other industry standard regex library routines.
>
> I seem to be failing on line 767 of basic_regex_creator.hpp.
>
> Any assistance is appreciated.
>
If I had to guess, I'd say the problem is "(?<!\\s*/\\s*)". This is a
negative look-behind assertion. For most regex engines out there,
look-behinds only work for fixed-width sub-expressions, like (?<!foo), which
asserts that the previous 3 characters are not "foo". Your's is a
variable-width look-behind, and I'm pretty sure Boost.Regex can't handle
that.
Which other "industry standard" regex library handles this? Perl doesn't
allow variable-width look-behinds. The only one I'm aware of which allows
this is GRETA (which I wrote many moons ago).
-- Eric Niebler Boost Consulting www.boost-consulting.com _______________________________________________ Boost-users mailing list Boost-users_at_[hidden] http://lists.boost.org/mailman/listinfo.cgi/boost-users
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net