我试图抓取字符串中最后一个数字后的文本,如果它不包含数字,则抓取整个字符串。
我能想到的最好的正则表达式是:
([^\d\s]*)$
但是我发现在mysql regexp而不是[[:space:]]中不支持\ s和\ d,也不确定\ d也是等价的。
这就是我想要完成的事情:
'1/2 Oz' returns 'Oz'
'2 3/4 Oz' returns 'Oz'
'As needed' returns 'As needed'
答案 0 :(得分:2)
这是你需要的正则表达式:
/^.*?(\d+(?=\D*$)\s*)/
只需用空字符串""
PHP代码:
$s = preg_replace('/^.*?(\d+(?=\D*$)\s*)/', '', 'Foo Oz');
//=> Foo Oz
$s = preg_replace('/^.*?(\d+(?=\D*$)\s*)/', '', '1/2 Oz');
//=> Oz
答案 1 :(得分:2)
首先,您可以简单地避开该类,而是使用范围:
[^0-9[:space:]]*$
但也有一个数字(实际上可能包括非ASCII数字)。 documentation has a list of these。POSIX bracket expressions。顺便说一下,它们被称为{{3}}。
[^[:digit:][:space:]]*$
然而,这种方法的一般问题是它不允许以后在字符串中使用空格(如As
和needed
之间的空格。要获得这些空格,但仍然避免捕获在数字后跟踪空格,确保第一个字符既不是空格也不是数字,然后将字符串的其余部分与非数字匹配。此外,使整个事物可选,以确保它仍然适用于以数字结尾的字符串
([^[:digit:][:space:]][^:digit:]*)?$