Вы должны правильно сгруппировать альтернативы внутри шаблона октетов:
String p="(?:\\d{1,2}|[01]\\d{2}|2[0-4]\\d|25[0-5])";
// ^^^ ^
Затем создайте скороговорку как
String pattern = p + "(?:\\." + p + "){3}";
Это станет немного эффективнее. Затем используйте matches
для запроса полного совпадения строки:
if(m.matches()) {...
См. Демонстрационную версию Java :
String p="(?:\\d{1,2}|[01]\\d{2}|2[0-4]\\d|25[0-5])";
String pattern = p + "(?:\\." + p + "){3}";
String text = "192.156.34.56";
// System.out.println(pattern); => (?:\d{1,2}|[01]\d{2}|2[0-4]\d|25[0-5])(?:\.(?:\d{1,2}|[01]\d{2}|2[0-4]\d|25[0-5])){3}
Pattern pi=Pattern.compile(pattern);
Matcher m=pi.matcher(text);
if(m.matches())
System.out.println(m.group()+" => true");
else
System.out.println("False"); => 192.156.34.56 => true
И вот демоверсия регулярного выражения .