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


How to use OR in this regex to get 2 or 3 numbers before a specific character?

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

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

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

我猜你可能想概括一下,以匹配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);

您只需将括号之间的值更改为{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);

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

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左侧任意数量的数字