Search code examples
regexnumbers

Regex to match a digit two or four times


It's a simple question about regular expressions, but I'm not finding the answer.

I want to determine whether a number appears in sequence exactly two or four times. What syntax can I use?

\d{what goes here?}

I tried \d{2,4}, but this expression accepts three digits as well.


Solution

  • There's no specific syntax for that, but there are lots of ways to do it:

    (?:\d{4}|\d{2})    <-- alternation: four digits if possible, else just two
    \d{2}(?:\d{2})?    <-- two digits, plus two more if possible
    (?:\d{2}){1,2}     <-- two digits, times one or two
    

    So, for example, to match strings consisting of one or more letters A–Z followed by either two or four digits, you might write ^[A-Z]+(?:\d{4}|\d{2})$; and to match a comma-separated list of two-or-four-digit numbers, you might write ^((?:\d{4},|\d{2},)*(?:\d{4}|\d{2})$ or ^(?:\d{2}(?:\d{2})?,)*\d{2}(?:\d{2})$.