如何使用正则表达式在 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 组:零个或多个数字,一个可选的 .
和一个或多个数字。
我想从这个字符串中提取每个算术公式:
+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 组:零个或多个数字,一个可选的.
和一个或多个数字。