1

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

目前,它只需要 3 个数字并忽略 2。我正在尝试 | 没有运气。

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

4 回答 4

1

我猜您可能想将其概括为匹配 bhp 之前的一位或多位数字(没有上限)?如果是这种情况,请使用:

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

更进一步,是否允许零个或多个空格字符,例如“200 bhp”?如果是这样,请使用:

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

最后,它是否需要不区分大小写,例如允许 300BHP?如果是这样,i请在最后一个斜杠后面加上:

preg_match_all('/(\d+)\s*bhp\b,/i', $str2b, $bhps);
于 2013-10-04T18:46:19.557 回答
0
preg_match_all('/(\d{2,3})bhp\b,/', $str2b, $bhps);

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

来源:http ://www.regular-expressions.info/repeat.html

Bt 如果您还希望它也匹配1bhp160000bhp例如,请改用它:

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

这将捕获左侧的任意数量的数字bhp

于 2013-10-04T18:43:25.993 回答
0

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

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

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

于 2013-10-04T18:44:23.863 回答
0

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

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

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

于 2013-10-04T18:45:22.650 回答