From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Eric Abrahamsen Newsgroups: gmane.emacs.devel Subject: Re: rx.el sexp regexp syntax Date: Sun, 03 Jun 2018 14:15:11 -0700 Message-ID: <878t7vk1wg.fsf@ericabrahamsen.net> References: <87h8mw3yoc.fsf@gmail.com> <20180525155126.GA4096@ACM> <87lgc7hebk.fsf@gmail.com> <87r2lzd375.fsf@ericabrahamsen.net> <87lgbx2dc1.fsf@ericabrahamsen.net> <87in6z6gwa.fsf@ericabrahamsen.net> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1528060406 29762 195.159.176.226 (3 Jun 2018 21:13:26 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 3 Jun 2018 21:13:26 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Jun 03 23:13:22 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fPaJV-0007e8-T7 for ged-emacs-devel@m.gmane.org; Sun, 03 Jun 2018 23:13:22 +0200 Original-Received: from localhost ([::1]:36659 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fPaLc-0004Q7-TT for ged-emacs-devel@m.gmane.org; Sun, 03 Jun 2018 17:15:32 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:51059) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fPaLT-0004Os-QW for emacs-devel@gnu.org; Sun, 03 Jun 2018 17:15:24 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fPaLP-0003PJ-Qz for emacs-devel@gnu.org; Sun, 03 Jun 2018 17:15:23 -0400 Original-Received: from [195.159.176.226] (port=35411 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fPaLP-0003Oo-Jv for emacs-devel@gnu.org; Sun, 03 Jun 2018 17:15:19 -0400 Original-Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1fPaJG-0007Mb-IW for emacs-devel@gnu.org; Sun, 03 Jun 2018 23:13:06 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 39 Original-X-Complaints-To: usenet@blaine.gmane.org Cancel-Lock: sha1:3fRtHGd1GLChM3Z3zUVjPRJgUeo= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 195.159.176.226 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:225977 Archived-At: Drew Adams writes: > It's not just about confusion/obscurity due to the "extra" > backslashes (for `(', `)', and `|'). It's also about the > fact that regexps themselves can be complicated. For > example, `directory-listing-before-filename-regexp': > > "\\([0-9][BkKMGTPEZY]? > \\(\\([0-9][0-9][0-9][0-9]-\\)?[01][0-9]-[0-3][0-9][ T][ > 0-2][0-9][:.][0-5][0-9]\\(:[0-6][0-9]\\([.,][0-9]+\\)?\\( > ?[-+][0-2][0-9][0-5][0-9]\\)?\\)?\\|[0-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]\\)\\|.*[0-9][BkKMGTPEZY]? > \\(\\(\\([A-Za-z']\\|[^\0-]\\)\\([A-Za-z']\\|[^\0-]\\)+\\.? +[ > 0-3][0-9]\\|[ 0-3][0-9]\\.? > \\([A-Za-z']\\|[^\0-]\\)\\([A-Za-z']\\|[^\0-]\\)+\\.?\\) +\\([ > 0-2][0-9][:.][0-5][0-9]\\|[0-9][0-9][0-9][0-9]\\)\\|\\([A-Za-z']\\|[^\0-]\\)\\([A-Za-z']\\|[^\0-]\\)+\\.? > +[ 0-3][0-9], +[0-9][0-9][0-9][0-9]\\|\\([ > 0-1]?[0-9]\\([A-Za-z]\\|[^\0-]\\)? [ > 0-3][0-9]\\([A-Za-z]\\|[^\0-]\\)? +\\|[ 0-3][0-9] [ 0-1]?[0-9] > +\\)\\([ > 0-2][0-9][:.][0-5][0-9]\\|[0-9][0-9][0-9][0-9]\\([A-Za-z]\\|[^\0-]\\)?\\)\\)\\) > +" > > Even after removing "extra" backslashes, it's still a bear: > > "([0-9][BkKMGTPEZY]? (([0-9][0-9][0-9][0-9]-)?[01][0-9]-[0-3][0-9][ > T][ 0-2][0-9][:.][0-5][0-9](:[0-6][0-9]([.,][0-9]+)?( > ?[-+][0-2][0-9][0-5][0-9])?)?|[0-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9])|.*[0-9][BkKMGTPEZY]? > ((([A-Za-z']|[^\0-])([A-Za-z']|[^\0-])+\\.? +[ 0-3][0-9]|[ > 0-3][0-9]\\.? ([A-Za-z']|[^\0-])([A-Za-z']|[^\0-])+\\.?) +([ > 0-2][0-9][:.][0-5][0-9]|[0-9][0-9][0-9][0-9])|([A-Za-z']|[^\0-])([A-Za-z']|[^\0-])+\\.? > +[ 0-3][0-9], +[0-9][0-9][0-9][0-9]|([ 0-1]?[0-9]([A-Za-z]|[^\0-])? > [ 0-3][0-9]([A-Za-z]|[^\0-])? +|[ 0-3][0-9] [ 0-1]?[0-9] +)([ > 0-2][0-9][:.][0-5][0-9]|[0-9][0-9][0-9][0-9]([A-Za-z]|[^\0-])?))) +" Sure -- the way I was thinking of it, anyway, you'd use a "pcre" macro for simpler regexp, and `rx' for more complicated ones. The line between simple and complex being drawn in a different place for each coder, obviously. Though I think anyone would benefit from seeing that filename regexp in `rx'!