regexp negative lookahead with groups

I try to use regexp with negative lookahead and with groups. Unfortunately it does not work as expected, so I need a helping hand.

I need to parse out the sizes (inches) at the end of a string which can be the format 'Tony Hawk 39.75"' --> 39.75" or with a length x width 'Tony Hawk 39.75" x 8.75"' --> 9.75" x 8.75". The problem is that the name also can contain numbers e.g. 'AD-37 8.0"'. So I tried with negative lookahead that a 'space' does not follow an 'x' (?!.+\s[x]) but it comes with strange result back.

Pattern regex = Pattern.compile("(?!.+\\s[x])\\s(\\d+\\.?\\d*\".*)");
String s = "Tony Hawk 39.75\" x 8.75\"";
// or String s = "AD-37 8.0\"";
Matcher m = regex.matcher(s);
if (m.find()) {

When I execute the example above it returns me for group 1 '8.75"', which I don't understand. Here I would expect 'Tony Hawk'.

Any hints what I did wrong?


  • Using the pattern:


    Might yield better results:

    Tony Hawk
    39.75" x 8.75"