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/