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