Php Regexp获取上次匹配后的所有文本
我试图抓取字符串中最后一个数字之后的文本,如果它不包含数字,则抓取整个字符串 我能想到的最好的正则表达式是:Php Regexp获取上次匹配后的所有文本,php,mysql,regex,Php,Mysql,Regex,我试图抓取字符串中最后一个数字之后的文本,如果它不包含数字,则抓取整个字符串 我能想到的最好的正则表达式是: ([^\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*)/ 然
([^\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
现场演示:这是您需要的正则表达式:
/^.*?(\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数字。这个顺便说一句,他们被称为
[^[:digit:][:space:]]*$
然而,这种方法的一般问题是,它不允许以后在字符串中使用空格,比如As和needed之间的空格。要获取这些字符,但仍要避免捕获数字后的尾随空格,请确保第一个字符既不是空格也不是数字,然后将字符串的其余部分作为非数字进行匹配。此外,将整个过程设置为可选,以确保它仍然适用于以数字结尾的字符串
([^[:digit:][:space:]][^:digit:]*)?$
首先,您可以简单地避开类,而是使用范围:
[^0-9[:space:]]*$
但也有一个数字,它实际上可能包括非ASCII数字。这个顺便说一句,他们被称为
[^[:digit:][:space:]]*$
然而,这种方法的一般问题是,它不允许以后在字符串中使用空格,比如As和needed之间的空格。要获取这些字符,但仍要避免捕获数字后的尾随空格,请确保第一个字符既不是空格也不是数字,然后将字符串的其余部分作为非数字进行匹配。此外,将整个过程设置为可选,以确保它仍然适用于以数字结尾的字符串
([^[:digit:][:space:]][^:digit:]*)?$
[^[:digit:][:space:][]?[^[:digit:][:space:][]?这需要一个数字。@m.buettner:preg_replace'/^..*\d+?=\d*$\s*/',Foo Oz'返回整个字符串。哦,对了,您正在替换,而不是匹配。你确定这会转换成mysql吗?老实说,我不确定OP是用哪种语言编写代码的。据我所知,MySQL在SQL中没有preg_replace的等价物。我曾尝试在纯MySQL中使用它,但在这种情况下,它似乎更容易在php中处理。这需要一个数字。@m.buettner:preg_replace'/^..*\d+?=\d*$\s*/',Foo Oz'返回整个字符串。哦,是的,您正在替换,而不是匹配。你确定这会转换成mysql吗?老实说,我不确定OP是用哪种语言编写代码的。据我所知,MySQL在SQL中没有preg_replace的等价物。我曾尝试在纯MySQL中使用它,但在这种情况下,似乎在PHP中更容易处理