Have you thought about supporting anchors like (^) and ($) ?

We went the opposite route, made full matching the default, and implemented partial matching by pre- and appending .*

As there are both a fullMatch and a partialMatch function, I don't see an immediate need for anchors, although I admit that they have the advantage that you can specify *in the regexp* whether you want full or partial matching.

You also wrote
I also want to add substring matching,
i.e., the possibility to find out against which strings parenthesized
parts of the regexp were matched.

Getting a good specification for the substring rules is non-trivial.
When writing regex-tdfa (on hackage) I consulted Glenn Fowler's
description at

http://www2.research.att.com/~gsf/testregex/re-interpretation.html

which are well-defined rules for POSIX substring capture.

Thanks for the pointer. I'll consult it when going for submatch extraction.

In the spirit of your DFA I am guessing the "mark" type for substring
capture would actually be an annotated copy of the whole regular
expression tree.

I am not sure whether it is a good idea to implement submatch capture only by means of a different semiring. I would not hesitate to extend the matching algorithm itself, if that leads to a clean implementation.

But regex-tdfa is quite old and over-complicated and while it is linear
in complexity it is not especially fast.  I am currently rewriting the
algorithm in OCaml (to learn OCaml) and I am trying to avoid the
/a{2,5}/ blowup that regex-tdfa has.

Did you experience problems with such blowup? The re2 library also implements bounded repetitions by blowing them up, so, at least, it doesn't seem to be a big problem for Google.

Cheers,
Sebastian

--
Underestimating the novelty of the future is a time-honored tradition.
(D.G.)



_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to