Re: Question about CL-PPCRE

"Marco Antoniotti (as marco dot antoniotti at unimib dot it)" <[email protected]> Wed, 24 Jun 2026 13:28:17 +0200
Newsgroups gmane.lisp.lispworks.general,gmane.lisp.cl-pro
Message-ID <CAG0Nw2m=XYi+0YqnS_59PPM01qzp-MT221mX5=LvyRRTuA8FPQ@mail.gmail.com>
Thanks Martin.

That's it.

Workarounds?  Shall I just roll out my own replacement function?  Note that
in my case I really just need

(replace-string-in <source string> <replacement indicator string>
<replacement>)

MA


On Wed, Jun 24, 2026 at 12:09 PM Martin Simmons <[email protected]>
wrote:

> >>>>> On Tue, 23 Jun 2026 20:47:32 +0200, Marco Antoniotti (as marco dot
> antoniotti at unimib dot it) said:
> >
> > Hi
> >
> > I am sure I missed something in the CL-PPCRE documentation, but here it
> is.
> >
> > I am fooling around with a C tokenizer and I am running into the
> following
> > problem.
> >
> > The string esre contains the "escape sequences" for C (and Perl, etc etc)
> >
> > CL Prompt > esre
> > "(\\\\(['\\\"\\?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F0-9]+))"
> >
> > If I use CL-PPCRE:REPLACE-ALL I get the following (I tried to boil it
> down):
> >
> > CL Prompt > (regex-replace-all "\\$<ES>" "/$<ES>/" esre)
> > "/(\\(['\\\"\\?\\abfnrtv]|[0-7]{1,3}|x[a-fA-F0-9]+))/"
> > T
> >
> > Apart from the bounding slashes, I would have expected the result of
> > CL-PPCRE:REPLACE-ALL not to return a shorter string.
> >
> > What exactly (backslash escaping for sure) am I missing?
>
> It looks like an undocumented feature of the replacement string: \\ is
> converted to a single backslash by CL-PPCRE::BUILD-REPLACEMENT-TEMPLATE.
> That
> means it will always return a shorter string when \\ is present in the
> replacement string and if you want \\ in the output then you'll need to use
> \\\\ (i.e. 8 backslashes in the Lisp syntax of that string!).
>
> Also, to make it more confusing, if \ is followed by anything other than \
> & `
> ' digits or {digits} then it is also treated as a single backslash.  i.e.
> \a
> is \a.
>
> --
> Martin Simmons
> LispWorks Ltd
> http://www.lispworks.com/
>
> _______________________________________________
> Lisp Hug - the mailing list for LispWorks users
> [email protected]
> http://www.lispworks.com/support/lisp-hug.html
>


-- 
Marco Antoniotti, Professor, Director         tel. +39 - 02 64 48 79 01
DISCo, University of Milan-Bicocca U14 2043   http://dcb.disco.unimib.it
Viale Sarca 336
I-20126 Milan (MI) ITALY

REGAINS: https://regains.disco.unimib.it/