IP addresses will include IPv6 addresses, so no, this is not a good regex for matching IP addresses. Which is the point.
Even in an IPv4-only world, that regexp admits strings like 123.456.7890.12345.
You're capturing the octets individually. You already have to do bounds checking on RFC 1918 ranges and such. Why wouldn't you do the octet checking in your post-match logic? This is just pedantic.