help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Help improve regular expression for 24 hours format


From: Jean Louis
Subject: Re: Help improve regular expression for 24 hours format
Date: Thu, 24 Nov 2022 11:59:20 +0300
User-agent: Mutt/2.2.7+37 (a90f69b) (2022-09-02)

* Yuri Khan <yuri.v.khan@gmail.com> [2022-11-24 09:33]:
> On Thu, 24 Nov 2022 at 10:38, Jean Louis <bugs@gnu.support> wrote:
> 
> > This regular expression shall match 24 hours format such as "12:34".
> >
> > I do not like how I wrote this regular expression, is there way to
> > provide to `rx' function something like "[012]"?
> 
> I’d write it in classic regexp notation as
> 
>     \(?:\(?:[01][0-9]|2[0-3]\):\(?:[0-5][0-9]\)\)
> 
> and probably leave like that as it’s readable enough as is.
> 
> If you feel the need for rx here, then, as Tomas said, ‘any’ (aka ‘in’
> and ‘char’) with ranges is your friend.
> 
> (Also I don’t understand your use of ‘(= 1 …)’. Looks redundant to
> me.)

Thanks, I make it now this way:

(defvar rcd-rx-time (rx line-start (or "00" "01" "02" "03" "04" "05" "06" "07" 
"08" "09" "10" "11" 
                                       "12" "13" "14" "15" "16" "17" "18" "19" 
"20" "21" "22" "23")
                        ":" (any "0" "1" "2" "3" "4" "5") (any digit)
                        line-end)
  "Regular expression for 24 hours format")

 ➜ "^\\(?:0[0-9]\\|1[0-9]\\|2[0-3]\\):[0-5][[:digit:]]$"

I like to have `rx' notation, and it still looks way complicated.

(string-match rcd-rx-time "00:00") ➜ 0
(string-match rcd-rx-time "30:00") ➜ nil
(string-match rcd-rx-time "24:00") ➜ nil
(string-match rcd-rx-time "23:69") ➜ nil
(string-match rcd-rx-time "23:59") ➜ 0

-- 
Jean

Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns

In support of Richard M. Stallman
https://stallmansupport.org/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]