Hi Damien!
Sorry for the late reply - I was on vacation. I didn't try your whole example but the regex that you mentioned seems to be OK to me. From your backtrace it looks like the error occurs when CL-PPCRE is trying to create the scanner (at the moment when it creates the Boyer-Moore matcher).
Some ideas:
1. Your methods for the generic function EXPECT don't have congruent lambda lists:
> ;; expected is a parse-tree > (defmethod expect ((expected t) (spawn stream) > &key (echo *standard-output*) > case-insensitive-mode > multi-line-mode > single-line-mode > extended-mode > destructive) > (expect (create-scanner expected > :case-insensitive-mode case-insensitive-mode > :multi-line-mode multi-line-mode > :single-line-mode single-line-mode > :extended-mode extended-mode > :destructive destructive) > spawn :echo echo)) > > ;; expected is a scanner > (defmethod expect ((expected function) (spawn extensions::process) > &key (echo *standard-output*)) > (expect expected (process-pty spawn) :echo echo))
This can lead to incosistent behaviour of all sorts, so you should change that first and see if it makes a difference.
2. If that doesn't help you might want to try the whole thing again with CL-PPCRE:*USE-BMH-MATCHERS* set to NIL globally. Do you still get an error? Is it different?
3. Your regular expression is constant and therefore may not be modified. However, it /will/ be modified if CL-PPCRE:CREATE-SCANNER is called with a true keyword argument for DESTRUCTIVE. This could happen due to the incongruent lambda lists mentioned above or due to a bug in CL-PPCRE. Try to make sure to always call CREATE-SCANNER with DESTRUCTIVE set to NIL or to always provide a fresh parse tree.
Let me know if this helps or if you need further assistance with this problem.
Thanks for your report, Edi.