Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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 如何在此正则表达式中使用或来获取特定字符前的2或3个数字?_Php_Regex - Fatal编程技术网

Php 如何在此正则表达式中使用或来获取特定字符前的2或3个数字?

Php 如何在此正则表达式中使用或来获取特定字符前的2或3个数字?,php,regex,Php,Regex,我的问题是如何修改下面的正则表达式,以从该字符串160bhp,中获取数字,以及从90bhp,字符串中获取数字 目前,它只接受3个数字,而忽略2个数字。我在尝试,但运气不好 preg_match_all('/(\d{3})bhp\b,/', $str2b, $bhps); 还有一个额外的量词,允许您指定令牌可以重复多少次。语法为{min,max},其中min为零或表示最小匹配数的正整数,max为等于或大于min的整数,表示最大匹配数。如果存在逗号但省略了max,则最大匹配数是无限的 资料来源:

我的问题是如何修改下面的正则表达式,以从该字符串
160bhp,
中获取数字,以及从
90bhp,
字符串中获取数字

目前,它只接受3个数字,而忽略2个数字。我在尝试,但运气不好

preg_match_all('/(\d{3})bhp\b,/', $str2b, $bhps);
还有一个额外的量词,允许您指定令牌可以重复多少次。语法为{min,max},其中min为零或表示最小匹配数的正整数,max为等于或大于min的整数,表示最大匹配数。如果存在逗号但省略了max,则最大匹配数是无限的

资料来源:

Bt如果您希望它也匹配
1bhp
160000bhp
例如,请使用此选项:

preg_match_all('/(\d+)bhp\b,/', $str2b, $bhps);
它将捕获
bhp

还有一个额外的量词,允许您指定令牌可以重复多少次。语法为{min,max},其中min为零或表示最小匹配数的正整数,max为等于或大于min的整数,表示最大匹配数。如果存在逗号但省略了max,则最大匹配数是无限的

资料来源:

Bt如果您希望它也匹配
1bhp
160000bhp
例如,请使用此选项:

preg_match_all('/(\d+)bhp\b,/', $str2b, $bhps);

它将捕获
bhp

左侧的任意数字,您只需将括号之间的值更改为
{2,3}

preg_match_all('/(\d{2,3})bhp\b,/', $str2b, $bhps);

这基本上提供了要匹配的前面字符定义的最小/最大数量。

您只需将括号之间的值更改为
{2,3}

preg_match_all('/(\d{2,3})bhp\b,/', $str2b, $bhps);

这基本上提供了要匹配的前面字符定义的最小/最大数目。

\d{3}
表示需要正好有3位数字。将
{3}
更改为
*
可以解决问题,并允许您检索
bhp
之前的任意数量的连续数字

preg_match_all('/(\d*)bhp\b,/', $str2b, $bhps);

是一个优秀的在线正则表达式测试器。

\d{3}
说需要正好有3位数字。将
{3}
更改为
*
可以解决问题,并允许您检索
bhp
之前的任意数量的连续数字

preg_match_all('/(\d*)bhp\b,/', $str2b, $bhps);

是一个优秀的在线正则表达式测试器。

我猜您可能希望将其推广到匹配bhp之前的一个或多个数字(没有上限)?如果是这种情况,请使用以下方法:

preg_match_all('/(\d+)bhp\b,/', $str2b, $bhps);
preg_match_all('/(\d+)\s*bhp\b,/', $str2b, $bhps);
再进一步说,是否允许零个或多个空格字符出现在两个字符之间,例如“200 bhp”?如果是,请使用以下命令:

preg_match_all('/(\d+)bhp\b,/', $str2b, $bhps);
preg_match_all('/(\d+)\s*bhp\b,/', $str2b, $bhps);
最后,它是否需要不区分大小写,例如允许300BHP?如果是这样,请在最后一个斜杠后加一个
i

preg_match_all('/(\d+)\s*bhp\b,/i', $str2b, $bhps);

我猜你可能想把它推广到匹配必和必拓之前的一个或多个数字(没有上限)?如果是这种情况,请使用以下方法:

preg_match_all('/(\d+)bhp\b,/', $str2b, $bhps);
preg_match_all('/(\d+)\s*bhp\b,/', $str2b, $bhps);
再进一步说,是否允许零个或多个空格字符出现在两个字符之间,例如“200 bhp”?如果是,请使用以下命令:

preg_match_all('/(\d+)bhp\b,/', $str2b, $bhps);
preg_match_all('/(\d+)\s*bhp\b,/', $str2b, $bhps);
最后,它是否需要不区分大小写,例如允许300BHP?如果是这样,请在最后一个斜杠后加一个
i

preg_match_all('/(\d+)\s*bhp\b,/i', $str2b, $bhps);