I am not certain but it looks like to me you are setting your state to equal the two letter abbreviation in the iRule. But you want to actually return the word, not the two letter abbrev so using state instead of abbrev in the iRule and I think this should work:
when HTTP_REQUEST {
set state [class match -value [whereis [IP::client_addr] state] equals uk_regions]
if {$state ne ""}{
switch $state {
"Greater London" {HTTP::redirect http://62.190.x.x/ab/grlon/}
"Leeds" {HTTP::redirect http://62.190.x.x/ab/leeds}
"York" {HTTP::redirect http://62.190.x.x/tv/York/}
default {pool TIN-HTTP-POOL}
}
}
}