On Wed, Jun 27, 2012 at 6:04 PM, Glenn Fowler <[email protected]> wrote:
> On Wed, 27 Jun 2012 17:43:06 +0200 Roland Mainz wrote:
>> How can I quote '-' in a ~(Ex)-style pattern [...] that it exactly
>> matches a '-' latter ?
>> I've tried the following pattern but the result is wrong (it should
>> match "hello-world" and "foo-bar"):
>> -- snip --
>> $ ~/bin/ksh -c 's="hello-world foo-bar" ;
>> dummy="${s//~(Ex)([_\-[:alnum:]]+)/D}" ; print -v .sh.match'
>> (
>>         (
>>                 hello
>>                 world
>>                 foo
>>                 bar
>>         )
>>         (
>>                 hello
>>                 world
>>                 foo
>>                 bar
>>         )
>> )
>> -- snip --
>> I tried to quote the '\' with a 2nd '\' without success (e.g. we get
>> the same wrong output/matches)
>> -- snip --
>> $ ~/bin/ksh -c 's="hello-world foo-bar" ;
>> dummy="${s//~(Ex)([_\-[:alnum:]]+)/D}" ; print -v .sh.match'
>> ...
>> -- snip --
>
>> Looking via dbx/gdb at the strings passed to the regex engine it looks
>> like ksh93 is either passing no '\' to |_ast_regcomp()| (in the case
>> of "~(Ex)([_\-[:alnum:]]+)") or it passes two '\' to |_ast_regcomp()|
>> (in the case of "~(Ex)([_\\-[:alnum:]]+)") ... it looks like a bug in
>> the ksh93 quoting mechanism for ~(E) patterns... ;-(
>
>> The only working workaround I found is to use \x<hex> to avoid having
>> to use \ to quote the '-' (the output below is IMO the expected one
>> for "${s//~(Ex)([_\-[:alnum:]]+)/D}"):
>> -- snip --
>> $ ~/bin/ksh -c 's="hello-world foo-bar" ;
>> dummy="${s//~(Ex)([_\x2d[:alnum:]]+)/D}" ; print -v .sh.match'
>> (
>>         (
>>                 hello-world
>>                 foo-bar
>>         )
>>         (
>>                 hello-world
>>                 foo-bar
>>         )
>> )
>> -- snip --
>
> its regex syntax and doesn't need a quote
> at http://pubs.opengroup.org/onlinepubs/9699919799/ set 9.3.5 item 7
> from that it looks like
> * if you want literal ']' use one of
>        []...]
>        [^]...]

I know...

> * if you want literal '-' place it last
>        [...-]

... I didn't know that... ;-/
Thanks... :-)

... but could you still check why ksh93 "swallows" the single '\' but
passes two '\' as "\\" to |_ast_regcomp()|, please ? Is this intended
or somehow a bug or sideeffect ?

----

Bye,
Roland

-- 
  __ .  . __
 (o.\ \/ /.o) [email protected]
  \__\/\/__/  MPEG specialist, C&&JAVA&&Sun&&Unix programmer
  /O /==\ O\  TEL +49 641 3992797
 (;O/ \/ \O;)

_______________________________________________
ast-developers mailing list
[email protected]
https://mailman.research.att.com/mailman/listinfo/ast-developers

Reply via email to