Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: $match size limit, suspicious (#B) behavior
- X-seq: zsh-workers 39665
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Zsh hackers list <zsh-workers@xxxxxxx>
- Subject: Re: $match size limit, suspicious (#B) behavior
- Date: Mon, 17 Oct 2016 07:51:44 -0700
- Cc: Sebastian Gniazdowski <sgniazdowski@xxxxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=c+eNNyB255TcCo274CFgRZ0ufysbkc7C11K8Dl06S58=; b=rA+nO3xc5iDF4xzjP72d4I9CapiVfg55u9jOUjHIgWkR5U9wTBcLOPIMcodduEhin6 0yrrsdBs/FWBStUaxmXkx9S+0Hdh1Vx+xsfqsc6wqRYNmuvTax5fT3x0bDSdQKdLeKtE O7MNvTOw/WJtKoCK4bIsPLLQrgYqOOkcUddL90e9PS/weqrOHGfRz1MGejlMA99iuTj/ gJRyPxiK4RuZXh172j5AlSINczqD6NIiG9pZlLcudRu+DHfbRwTZg51LBbpX4Lb2ey9w idyg8PLXyODlSBX1+zCocw0JJDg5jVRIVycy+5xka4dNSctJuA7bxdcBTwE5ez82VkB+ 8bRw==
- In-reply-to: <CAKc7PVCt1BOU1_M_3AaRgnVDihKemJE0OQMmqY33BZXOhq0xEQ@mail.gmail.com>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <CAKc7PVCt1BOU1_M_3AaRgnVDihKemJE0OQMmqY33BZXOhq0xEQ@mail.gmail.com>
[Sebastian Cc'd in case the list is still having indigestion over gmail MTAs]
On Sun, Oct 16, 2016 at 2:15 AM, Sebastian Gniazdowski
<sgniazdowski@xxxxxxxxx> wrote:
>
> Now code that matches either $var, ${var}, \$:
>
> while [[ "$mybuf" =
> (#b)([^\$\\]#)((#B)(\$([[:alpha:]_][[:alnum:]_]#|[[:digit:]]##)(\[[^[:space:]]#\])(#c0,1))|(\$[{](\([a-zA-Z0@%#]##\))(#c0,1)([[:alpha:]_][[:alnum:]_]#|[[:digit:]]##)(\[[^[:space:]]#\])(#c0,1)[}])|([\\][\'\"\$]))(#b)(*)
> ]]; do
>
> The problem: (#B) should have disabled all parentheses from where it
> is placed
What it looks like you're attempting to do is have
(#b)([^\$\\]#)((#B)....)(#b)(*) count as match[1] match[2] match[3]
without treating any of the more deeply nested parens inside the
match[2] pattern as backreferences?
That works with a very simple pattern:
% [[ 12345 = (#b)(?)((#B)(?)(?)(?))(#b)(?) ]]
% print -l :$^match
:1
:234
:5
The problem seems to be that the (#B) stops / (#b) implicitly resumes,
at the "|" in the second set of parens:
% [[ 12345 = (#b)(?)((#B)(?)|([[:alnum:]](#c0,1))(?))(#b)(*) ]]
% print -l :$^match
:1
:2
:
:
:345
If I add another set of parens around everything that follows (#B) up
to just before the close of the paren that opens before (#B), it looks
like what I expect:
% [[ 12345 = (#b)(?)((#B)((?)|([[:alnum:]](#c0,1))(?)))(#b)(*) ]]
% print -l :$^match
:1
:2
:345
Messages sorted by:
Reverse Date,
Date,
Thread,
Author