'Regex to match multiple cases

I have the following examples that must match with my regex

1,[]
1,[0,0,0,[]]
1,[0,0,0,0,0,[]]
1,1
1

I came up with a simple way of matching the middle ones with .?,\[.*\[\]\] but it doesnt match the first and the last one.

Maybe this is too much to handle with regex but I want to check the following things:

  1. If there is a ',' it should have a following character or characters(numbers or letters)
  2. If a bracket is opened: it should close '[]'
  3. The bracket insides can be whatever but it must respect rule 1 and 2.

I am trying to find a solution so I'm grateful if you can help me. Thank you.



Solution 1:[1]

You can use

^\d+(?:,(?:(\[(?:[^][]++|\g<1>)*])|\d+))?$

See the regex demo. Details:

  • ^ - start of string
  • \d+ - one or more digits
  • (?:,(?:(\[(?:[^][]++|\g<1>)*])|\d+))? - an optional sequence of
    • , - a comma
    • (?:(\[(?:[^][]++|\g<1>)*])|\d+) - one of the alternatives:
      • (\[(?:[^][]++|\g<1>)*]) - Group 1: [, then zero or more occurrences of one or more chars other than [ and ] or Group 1 pattern recursed
      • | - or
      • \d+ - one or more digits
  • $ - end of string.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Wiktor Stribiżew