1

我试图抓取字符串中最后一个数字之后的文本,如果它不包含数字,则抓取整个字符串。

我能想到的最好的正则表达式是:

([^\d\s]*)$

但是我发现 mysql regexp 不支持 \s 和 \d 而不是 [[:space:]] 并且不确定什么 \d 也是等价的。

这就是我想要完成的事情:

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

2 回答 2

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

现场演示:http: //ideone.com/u887D7

于 2013-08-09T18:12:38.337 回答
2

首先,您可以简单地避免使用该类,而是使用一个范围:

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

但是也有一个用于数字的(实际上可能包括非 ASCII 数字)。文档中有这些. 顺便说一下,它们被称为POSIX 括号表达式

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

但是,这种方法的一般问题是它不允许字符串后面的空格(例如和之间的空格Asneeded要获得这些,但仍避免捕获数字后的尾随空格,请确保第一个字符既不是空格或数字,然后将字符串的其余部分匹配为非数字。此外,使整个内容可选,以确保它仍然适用于以数字结尾的字符串。

([^[:digit:][:space:]][^:digit:]*)?$
于 2013-08-09T18:13:11.540 回答