If you want to extract IP and date, why don't you create two patterns?
String input="192.168.90.8 - - [321/Jan/2013:00:00:11 -0800]";
Pattern pattern=Pattern.compile("((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))");
Matcher matcher=pattern.matcher(input);
if (matcher.find()){
System.out.println("found");
System.out.println(matcher.group());
}
pattern=Pattern.compile("([\\d]+/[\\w]+/[\\d]+:[\\d]+:[\\d]+:[\\d]+)");
matcher=pattern.matcher(input);
if (matcher.find()){
System.out.println("found");
System.out.println(matcher.group());
}
Output:
found
192.168.90.8
found
321/Jan/2013:00:00:11