PNS
PNS

Reputation: 19905

Simple Java regex to extract IP address and port from enclosing string

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

Answers (2)

Ace McCloud
Ace McCloud

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

hd1
hd1

Reputation: 34657

Use commons validator:

InetAddressValidator validator = InetAddressValidator.getInstance();
if (validator.isValid(ipAddress) {
   // cool, isn't valid
}
throw new InvalidAddressException(ipAddress);

Upvotes: 1

Related Questions