1

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).

PNS
  • 19,295
  • 32
  • 96
  • 143
  • If it's not a problem if it is simple *and long*, check this (no port but can be appended) https://stackoverflow.com/questions/23483855/javascript-regex-to-validate-ipv4-and-ipv6-address-no-hostnames – uraimo Apr 20 '15 at 20:11
  • Why a regex? Regular `String` methods are better here – fge Apr 20 '15 at 20:21
  • I have seen many such regular expressions, but looking for a simple one. :-) – PNS Apr 20 '15 at 20:24

2 Answers2

2
([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.

Ace McCloud
  • 798
  • 9
  • 27
1

Use commons validator:

InetAddressValidator validator = InetAddressValidator.getInstance();
if (validator.isValid(ipAddress) {
   // cool, isn't valid
}
throw new InvalidAddressException(ipAddress);
hd1
  • 33,938
  • 5
  • 80
  • 91
  • Regular expressions are not the way to go here, PNS. – hd1 Apr 20 '15 at 20:33
  • They are the only way. The address/port pair is extracted from a long string, as I say in the question, and that long string also has other fields that nee to be extracted. So, the regular expression I asked for will be part of a much longer one. – PNS Apr 20 '15 at 21:21