Reputation: 19905
Consider a pair of IPv4
or IPv6
address and port, separated by either /
or :
, e.g.
10.10.10.10:1234
The port is optional, so strings like
10.10.10.10/
10.10.10.10:
10.10.10.10
are also valid. The address/port pair may be followed by space or comma characters and it is part of a much longer enclosing string.
What would be a very simple regex to extract the 2 values in separate fields from the enclosing string (without using String manipulation functions)?
For example, an expression like
(?<address>[^\s,]+[^\s,:\.])((/|:)(?<port>\d*))?
extracts both address and port in the same string.
The goal here is to achieve extraction with the simplest possible regex, even if it is not 100% accurate (i.e., even if it matches other strings as well).
Upvotes: 1
Views: 3439
Reputation: 900
([0-9.]*)(\/|:)([0-9]*)
Here is the regex . First group gives you IP. Third group gives you the Port number. Middle group gives separator i.e / or : used for alternation. It can be ignored.
Upvotes: 2
Reputation: 34657
Use commons validator:
InetAddressValidator validator = InetAddressValidator.getInstance();
if (validator.isValid(ipAddress) {
// cool, isn't valid
}
throw new InvalidAddressException(ipAddress);
Upvotes: 1