Instead of trying to find regexes to match values, why not instead take the values to some canonical form? If Value A and Value B both transform to some canonical form C1, then they match. CPAN turns up:
String::Canonical and String::Normal.
This is an intriguing concept. However, I don't understand how this would be better than using regex? isn't regex also 'philosophically' speaking just finding the canonical representation of the data using patterns?