Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Regexp获取上次匹配后的所有文本_Php_Mysql_Regex - Fatal编程技术网

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中更容易处理