zsh-users
 help / color / mirror / code / Atom feed
From: Peter Stephenson <p.w.stephenson@ntlworld.com>
To: "zsh-users@zsh.org" <zsh-users@zsh.org>
Subject: Re: Regular expression expanding and matching
Date: Sun, 25 Nov 2012 18:57:41 +0000	[thread overview]
Message-ID: <20121125185741.3e99b7f0@pws-pc.ntlworld.com> (raw)
In-Reply-To: <50B23D2D.9060603@internecto.net>

On Sun, 25 Nov 2012 16:45:49 +0100
Mark van Dijk <lists+zsh@internecto.net> wrote:
> I was trying to match a string with a regular expression as follows:
> 
> ---
> #!/usr/local/bin/zsh
> zmodload zsh/pcre
> somestring="121125"
> todaysday="25"
> yesterday="24"
> 
> set -xv
> if [[ $somestring -pcre-match \d{4}${todaysday} ]]; then
>     echo "somestring matches today"
> elif [[ $somestring -pcre-match \d{4}${yesterday} ]]; then
>     echo "somestring matches yesterday"
> fi
> set +xv
> 
> Apparently there is no expansion of ${todaysday} and ${yesterday}. This
> is not really surprising because in regular expressions many characters
> have a different meaning.

I think the problem is different from what you think it is.  Try (note
doubled backslashes):

if [[ $somestring -pcre-match \\d{4}${todaysday} ]]; then
    echo "somestring matches today"
elif [[ $somestring -pcre-match \\d{4}${yesterday} ]]; then
    echo "somestring matches yesterday"
fi

It's not that the $... isn't expanded, it's that the \d is also handled
like a normal command line argument.  Vin's change works because in
double quotes \d remains \d because it doesn't have a special meaning.

To put it more broadly, arguments in [[ ... ]] get expanded in all the ways that make sense for generating a single word.  So file name generation (globbing)
doesn't happen, and array substitution produces a single word (as if double
quotes surrounded the array), but otherwise it works like a normal command line argument.  So the normal quoting rule for backslashes apply.

-- 
Peter Stephenson <p.w.stephenson@ntlworld.com>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/


  parent reply	other threads:[~2012-11-25 18:57 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-25 15:45 Mark van Dijk
2012-11-25 18:30 ` Vin Shelton
2012-11-25 19:09   ` Mark van Dijk
2012-11-25 18:57 ` Peter Stephenson [this message]
2012-11-25 19:18   ` Vin Shelton
2012-11-25 19:30 ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20121125185741.3e99b7f0@pws-pc.ntlworld.com \
    --to=p.w.stephenson@ntlworld.com \
    --cc=zsh-users@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).