正则表达式抓住最后一场比赛后的所有文字

I am trying to grab the text after the last number in the string and grab the whole string if it doesn't contain numbers.

The best regex I could come up with is:

([^\d\s]*)$

However I found that \s and \d aren't supported in mysql regexp rather [[:space:]] and not sure what \d is equivalent too.

This is what I'm trying to accomplish:

'1/2 Oz' returns 'Oz'
'2 3/4 Oz' returns 'Oz'
'As needed' returns 'As needed'

This is the regex you will need:

/^.*?(\d+(?=\D*$)\s*)/

And just replace matched text with empty string ""

PHP code:

$s = preg_replace('/^.*?(\d+(?=\D*$)\s*)/', '', 'Foo Oz');
//=> Foo Oz

$s = preg_replace('/^.*?(\d+(?=\D*$)\s*)/', '', '1/2 Oz');
//=> Oz

Live Demo: http://ideone.com/u887D7

First of all, you could simply avoid the class, and use a range instead:

[^0-9[:space:]]*$

But there is one for digits as well (which may actually include non-ASCII digits). The documentation has a list of these. They are called POSIX bracket expressions by the way.

[^[:digit:][:space:]]*$

However, the general problem with this approach is that it doesn't allow for spaces later on in the string (like the one between As and needed. To get those, but still avoid capturing trailing spaces after digits, make sure, the first character is neither space nor digit, then match the rest of the string as non-digits. In addition, make the whole thing optional, to ensure that it still works with strings ending in a digit.

([^[:digit:][:space:]][^:digit:]*)?$