From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 22275 invoked from network); 27 Jan 2023 13:30:47 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 27 Jan 2023 13:30:47 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1674826247; b=dBV72Mjbft7VIr+FtTCubIyrX/ntb9p2/N4YTuOCbVbtQlYL7/yQy0++vQR2JqaF5KG7zTzVg+ vVtnAV7dvOUax//7BuekxEE1aAb+Z+Td/vV0WzZJE/H3M7wCRQt6sqYXv3/wCp8PNlFoCLO2Dz tAzf5oCRyXTGqEIou3u3IEXLK1CYS/dfM8V27gLq37wxj6kVg5ygqrZFlLyr/vM2gyPtiXaGmC AAyfRBsqusPOfmGQtIl0H01s/XJVnhOAF7EQ4YUnlynLAPngVIyfIUw6cZZGm80rWcnuAwLR1s FbqEtLM+lLo1dGj3Hh3XgwiWflNiXkaUrf6vjHjsyPu7Tw==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (relay6-d.mail.gandi.net) smtp.remote-ip=217.70.183.198; dmarc=none header.from=chazelas.org; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1674826247; bh=2HZ+0JvvmdfjVdpfyEpVODRH9aZga3mPiN5RkULocJw=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:In-Reply-To:Content-Transfer-Encoding:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:DKIM-Signature; b=PtQA0K9HtgXg6j5quyRNCBf8diSHOJujYFFZ/L4SBsQ2FTBRkwEYQ4AR0HlTcPo5eyYoNL1eXI IVtI0RtHC0tBnxDwkwqxpSngt/+rNkf0eD+Q7w81ZxqX8zt3sY5cA93v6f1V7w2PkkIAtlfw4M 58j9YDFmrwpikL0OXmYy0V+ZPted8AklVfn74I9az+eUsILtfHkDmzrjuIkxXsC3mLEyOkxSiL cLHQO+co8OQHge24UTc35PQ6htM3aPA3rgzG4xcec7WPWTKr2n8aTMnebZ2QEtrXCculNs2ADl C/oW0Irjf5p8GX4QFPvwPX2KT3eRf0ik+8UIMNU0rZ58+A==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:In-Reply-To:Content-Transfer-Encoding :Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID; bh=f5KaxuW3elnQPeOEV+I/n5RqHIkQhkQUpTyf6kyISpQ=; b=sAK1jneqm9lGqHDi/0lL3RbmCu sbCBYhmHt6BSGhDjATIreKyj4ynft2g8hdUF0xcUJ6oXvlhulOR8TZS1F/jnLVDRWDGNNUCx00cRQ xsv9e0SfdweHopy11VE/+OGaJwBLHBayeruqsEH3MpuBbRD/41z1UwYqCyURd/b8g/TXYAifwC35L r3E5Bnsjigg9Bcs9SA+3jFzAztH9hl6H0Kwezj3s+E1nuWpRuGR8bIWyLm3J/Hd8O6Jpz1hc0uZz+ 14ppo0GfdkxhydfxnfEnZXz4Db7tvRqmBC8x0EDLJFTiOVfMb0WPUM1lqR9y9lCUuHHTyr8dblg/s QlELgi/w==; Received: by zero.zsh.org with local id 1pLOoZ-000FgH-Ff; Fri, 27 Jan 2023 13:30:47 +0000 Authentication-Results: zsh.org; iprev=pass (relay6-d.mail.gandi.net) smtp.remote-ip=217.70.183.198; dmarc=none header.from=chazelas.org; arc=none Received: from relay6-d.mail.gandi.net ([217.70.183.198]:36959) by zero.zsh.org with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) id 1pLOnu-000EzH-0A; Fri, 27 Jan 2023 13:30:06 +0000 Received: (Authenticated sender: stephane@chazelas.org) by mail.gandi.net (Postfix) with ESMTPSA id A6C45C0003; Fri, 27 Jan 2023 13:30:03 +0000 (UTC) Date: Fri, 27 Jan 2023 13:30:03 +0000 From: Stephane Chazelas To: Sebastian Gniazdowski Cc: Zsh Users Subject: Re: Possible to match string supporting backslash quoting? Message-ID: <20230127133003.spbcjjecye6lz5gp@chazelas.org> Mail-Followup-To: Sebastian Gniazdowski , Zsh Users References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Seq: 28827 Archived-At: X-Loop: zsh-users@zsh.org Errors-To: zsh-users-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-users-request@zsh.org X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: 2023-01-27 11:47:14 +0000, Sebastian Gniazdowski: > HI, > I'm matching var="…" and would want to support quoting, i.e.: > var="abc\"ef". So far I have: > > qstr='(#B)(["](#b)(*~(*[^\\]([\\][\\])#["]*)))["]' > [[ '"qqq--\\"abc"' == (#b)$~qstr ]];printf ·ec=%s\\n $?;@str-dump match > Output: > ·ec=1 > > qstr='(#B)(["](#b)(*~(*[^\\]([\\][\\])#["]*)))["]' > [[ '"qqq--\"abc"' == (#b)$~qstr ]];printf ·ec=%s\\n $?;@str-dump match > > Output: > ·ec=0 > 1: qqq--\"abc > 2: > 3: > > So it at least detects a \\" in the input. Would it be possible to utilize > the negations ~ and ^ to somehow match "str\"ef" as: str"ef, and "str\\"ef" > as: str? [...] I didn't try to decipher your patterns, but to match a quoted strings while handling backslash escaping, in ERE, you do: "(\\.|[^\\"])*" Whose zsh -o extendedglob equivalent would be: "(\\?|[^\\"])#" -- Stephane