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/
next prev 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).