Matt,

In fact, there might be a bug in the \1 substitution mechanism, so it is not a 
bad idea to use the irregex-style replacement anyway, even if you are sticking 
with POSIX REs.  I noticed this a few days ago when attempting to escape 
characters using a backslash.  On the other hand, I could just be doing it 
wrong.

This is correct:

#;354> (print (irregex-replace/all "([:@{}>])" "{foo:}" "\\" 1))    
\{foo\:\}                                                           

This is obviously not correct:

#;355> (print (string-substitute "([:@{}>])" "\\\\1" "{foo:}" #t))  
\\1foo\\1\\1          

But, when prefixing the character with something other than backslash, \1 works 
fine:
                                              
#;356> (print (string-substitute "([:@{}>])" "^\\1" "{foo:}" #t))   
^{foo^:^}                                                           

This is with 4.8.0.6 (although I don’t think it matters) and the latest regex.

Jim

> On Sep 7, 2015, at 21:07, Matt Welland <mattrwell...@gmail.com> wrote:
> 
> Ok, I sort of panicked when I saw what looked like regex being deprecated 
> (read my original message below if you wish). After re-reading the irregex 
> egg wiki page a few times it looks like all is well assuming these two things:
> 
> 1. irregex unit will continue to support reading the pcre syntax
> 2. those using the backslash substitution destination string syntax be 
> prepared to write a parser/converter.
> 
> As a request to the developers - please consider adding the function from the 
> regex egg that parses the \N type dest strings to irregex.
> 
> Thanks.
> 
> Matt
> -=-
> ====== my original "panicked"message =====
> 
> From a comment to Chicken-janitors regarding bug #1189 I saw this: 
> 
> "This seems to be an undocumented feature of the substring-replace
>  function, which allows you to escape the backslash. I would recommend
>  using irregex, the regex egg's API is kind of deprecated anyway, and it's
>  also not very efficient."
> 
> Then in the regex egg wiki page I see:
> 
> "It is a thin wrapper around the functionality provided by irregex 
> <http://wiki.call-cc.org/man/4/Unit%20irregex> and is mostly intended to keep 
> old code working."
> 
> These statements leave me a little concerned as I use the regex egg a fair 
> amount and I don't have the energy to learn yet another abstraction or to go 
> back and rewrite old code. More importantly I expose the use of regexes to 
> users of Megatest and logpro and they have no tolerance for doing something 
> considered a "standard" in a different way, especially if it means using 
> something that looks like Scheme.
> 
> From re-reading the irregex egg wiki page I think the only thing I rely on 
> that is missing is the \1 substitution mechanism. Is there an alternative 
> syntax? All I see is the following:
> (irregex-replace "(.)(.)" "ab" 2 1 "*")
> Which would be implemented using a destination of "\2\1*" in 
> string-substitute. Converting an old-style destination string to the list of 
> numbers and strings would not be too hard I suppose.
> 
> Thanks,
> 
> Matt
> -=-
> 
> 
> _______________________________________________
> Chicken-users mailing list
> Chicken-users@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/chicken-users

_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to