Um entweder 1, 2 oder 4 Elemente übereinzustimmen, muss der ERE wie folgt geändert werden:
s1="1,2,3,4" ;\ s2="1,2,3" ;\ s3="1" ;\ sP='^[1-9][0-9],$|^(([1-9][0-9],))$' ;\ [[ "$," =~ $sP ]] && printf "\$s1, matches\n" ;\ [[ "$," =~ $sP ]] || printf "\$s2, does not match\n" ;\ [[ "$," =~ $sP ]] && printf "\$s3 matches\n"
Ihr ursprüngliches ERE könnte iterativ beschrieben werden:
[1-9][0-9],
entspricht 1 oder 2 oder 3 oder 432 usw.
([1-9][0-9],)
trifft auf eine einzelne oder zwei aufeinanderfolgende Sequenzen, die oben beschrieben wurden: 1 oder 3 oder 1,2 oder 10 oder 10,432 usw.
(([1-9][0-9],))
entspricht einem oder zwei Vorkommen der letzten Sequenz 1 oder 1,2 oder 1,2,3 usw.