This is more a comment than a real answer but...
# _your_ regex:
sh$ [[ 923.34442.123 =~ ^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ ]] && echo ok || echo notok
ok
# regex using backslash:
sh$ [[ 23.34442.123 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] && echo ok || echo notok
notok
As this has already been explained, the key point is the use of the backslash (\). The dot (.) alone will match any single character. The [0-9]{1,3} part means "match any sequence of 1 to 3 digit".
So, broadly speaking, your regex would match any string having 4 sequences of 1 to 3 digits separated by any char:
9 2 3 . 3 4 4 4 2 . 1 2 3
d d d a d d d a d a d d d
i i i n i i i n i n i i i
g g g y g g g y g y g g g
i i i c i i i c i c i i i
t t t h t t t h t h t t t
a a a
r r r
It might be surprising at first, but it matches...
As a side note, even the "backslash-dot regex" will accept non valid IPv4 addresses: for example 923.34.42.123 would match, but is obviously incorrect. So for fun here is an awk based filter (and its test set) to remove invalid IPv4 addresses from a listing. Feel free to adapt to your needs (or ignore it completely;)
sh$ BYTE='[0-2]?[0-9]?[0-9]' # Might even be BYTE='0*[0-2]?[0-9]?[0-9]'
sh$ cat << EOF | awk -v FS='.' "/^$BYTE\.$BYTE\.$BYTE\.$BYTE$/"' {
if (($1<= 255)&&($2<=255)&&($3<=255)&&($4<=255))
print $0 }'
4.2.2.2
a.b.c.d
192.168.1.1
0.0.0.0
255.255.255.255
255.255.255.256
192.168.0.1
192.168.0
1234.123.123.123
EOF
And here is the result:
4.2.2.2
192.168.1.1
0.0.0.0
255.255.255.255
192.168.0.1
[.]not.(backslash-escaping sometimes also works, but is easier to lose through multiple layers of parsing).