如何使用正则表达式在 PHP 中获取多次出现的公式

How to use regex to get multiple occurrences of formula in PHP

我想从这个字符串中提取每个算术公式:

+100*25-30

我使用了这个正则表达式:

preg_match_all("/(([\*\+\-\/])([0-9]+\.?[0-9]*))+/", "+100*25-30", $match);

它只捕获最后一次出现的 -30 但是如果我像这样在运算符之前输入 space:+100 *25 -30,它会正确捕获所有内容,但我应该在没有 space 的情况下进行。怎么做?

(([\*\+\-\/])([0-9]+\.?[0-9]*))+ 模式是 repeated capturing group 的示例。由于它匹配整个 +100*25-30 字符串,捕获每对匹配运算符及其后的数字,因此只有最后一次捕获的事件存储在组 1 中(即 -30)。

你可以使用

preg_match_all("/([*+\/-]?)([0-9]+\.?[0-9]*)/", "+100*25-30", $match)

参见PHP demo。或者,preg_match_all("/([*+\/-]?)([0-9]*\.?[0-9]+)/", "+100*25-30", $match).

另见 regex demo.

详情:

  • ([*+\/-]?) - 第 1 组:可选的 *+/- char
  • ([0-9]*\.?[0-9]+) - 第 2 组:零个或多个数字,一个可选的 . 和一个或多个数字。