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,T_SCC_BODY_TEXT_LINE, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 11563 invoked from network); 6 Jul 2022 18:45:24 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 6 Jul 2022 18:45:24 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1657133124; b=pVKRgVbzDdz04W1iqh5ZO7QCsHFI/NHQSuORh8LesqcWPDLVh+2ajTXyuHoCzw2rimR/o2g2zE 8PQtb+tCkA+mB+aJVEcNM8ha/7On9K2vRRLYg1hOHbxQX0VQYsKiASOj/AS64cZ917cggAVCIV +suXErrWYIjbBoi61+7vCKc/kvnsT36WCF2CFdprHJIBc9F6zjOX2thrAKjWPVMtDj5J4DO5+A Krn7TXbRly+Q5z0YmjxLL+TT6UUuIzhjjL/K3zrPJyZKIi6KJwRw/QFbG52C4k4qJBbsVbkB6R CttyZzX17YSLKFANjybc8diphKaF2QUb1Im3rHln2PS8Sw==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (relay7-d.mail.gandi.net) smtp.remote-ip=217.70.183.200; 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=1657133124; bh=fgEAwxzcxaxiLnodP0Un9fuzC2U3mekMP9z7JQr3Jwo=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Transfer-Encoding:Content-Type:Message-ID:References: In-Reply-To:Subject:Cc:To:From:Date:MIME-Version:DKIM-Signature; b=LZLjBgm1eycFXKADoHqvZ1JjUhCV8OCcqvLZaoXloTrbZSO34FuOOxCrPm6FGI9C4XvQBbWfrD krAScpXy2ie6ZOOaOXfhwhWArbEzXjmJu2DK1WI8mk7NVNSzkDcpb2F5vTWKjhHjXMQqhUBrwo aH/vUYVm3zazuj7/EgDDWOTnl/Ro+wccBwu6rFZQSNhBmt40DPOzIcRbuPaYlv/EHTRWSrqnNY g2KYjAnc1YRfNAEjYnb7aNinEZQCPZxQ12EIWfcLGyhKN/pHjsWYT/SdqdStG8qHrQUrODNEXd O0U0rMov52vPNPI0X1k4n+nqgmV30zJYfkHfKVHEpi5OgQ==; 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:Content-Transfer-Encoding: Content-Type:Message-ID:References:In-Reply-To:Subject:Cc:To:From:Date: MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=N+Pg1fvHZvbFIMqxWsvme2stLgQFwZ2cFuV/Tk2Nkag=; b=gqBhguRAGEYVLZvjzYWNXMsX61 yYlFYSKfft7+6XRl9lhlL1TAWO0ZEGIONh+j9KNMPaHlXhVDhZwxDX63eCgr3bxDiZb+5/Jhjx8A+ pXdQZnbkTqtQbE/0K+bqLVnrOTTb6N9dCBOXb2v+8VEA0ouAIZ0vhkcmX4tKwrMKJ0HuyZ4vEvOdw z754vfXzDEYDTDvEKLHGA6an8YlOgW9UoWjy8Z06Rdlu8iFaHHdTx6PnHu0r4U1aF9tO7SK6jxSNu AaCaBtaLLoHxbt0+P9sdMAgvtde3PbaVlummXNeExcGyCdnm7wntcG5TXKSUSvCUhkWFACLjSAxK/ xRatJxjw==; Received: from authenticated user by zero.zsh.org with local id 1o9A1a-000E99-3n; Wed, 06 Jul 2022 18:45:22 +0000 Authentication-Results: zsh.org; iprev=pass (relay7-d.mail.gandi.net) smtp.remote-ip=217.70.183.200; dmarc=none header.from=chazelas.org; arc=none Received: from relay7-d.mail.gandi.net ([217.70.183.200]:42357) by zero.zsh.org with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) id 1o99wR-000Dha-Nt; Wed, 06 Jul 2022 18:40:04 +0000 Received: (Authenticated sender: stephane@chazelas.org) by mail.gandi.net (Postfix) with ESMTPA id EA8D920003; Wed, 6 Jul 2022 18:40:01 +0000 (UTC) MIME-Version: 1.0 Date: Wed, 06 Jul 2022 19:40:01 +0100 From: stephane@chazelas.org To: Peter Stephenson Cc: Zsh hackers list Subject: Re: Extending regexes In-Reply-To: <76883431.1281129.1656942459330@mail2.virginmedia.com> References: <76883431.1281129.1656942459330@mail2.virginmedia.com> Message-ID: X-Sender: stephane@chazelas.org Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit X-Seq: 50405 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: FWIW, ast's extended and augmented regexps as supported by ksh93's [[ =~ ]] operator or more generally in globs after ~(E) (extended) ~(A) (augmented) do have AND and NOT operator. That's \& and \! in ERE and & and ! in ARE. ere() ksh -c '[[ $1 =~ $2 ]]' ksh "$@" are() ksh -c '[[ $1 =~ (?A)$2 ]]' ksh "$@" And then you can do ere x '^([[:lower:]]\&.)$' ere y '^x\!$' are x '^([[:lower:]]&.)$' are y '^x!$' Also note that AND(A,B) can be done with NOT(OR(NOT(A), NOT(B))) so even ksh88 or bash can do AND in their globs (with extglob in bash) with !(!(A)|!(B)) -- Stephane