2

我必须从列表中提取方程式并通过运算符符号(左和右)将它们分开。我遇到的问题是第一个或第二个字符可能是负面的,也可能不是负面的。

例如:

$number = "-7.89-2.45";
preg_split ('/[\+\-×÷\*\/]+/', $number);
//expect: [0]=>-7.89 [1]2.45

$number = "7.89-2.45";
preg_split ('/[\+\-×÷\*\/]+/', $number);
//expect: [0]=>7.89 [1]2.45

$number = "-7.89--2.45";
preg_split ('/[\+\-×÷\*\/]+/', $number);
//expect: [0]=>-7.89 [1]-2.45

但问题是,如果第一个字符是 a,它不会准确地拆分它 - 它经常拆分它。如果第二个是负数并且减去它不会拉出负数。所以我试图确定一个正则表达式来严格按运算符拆分它们。

4

1 回答 1

1

看来您可能会拆分数字后面的运算符符号。

利用

$list = preg_split ('~(?<=\d)[-+×÷*/]~u', $number);

请参阅此正则表达式演示。这(?<=\d)是一个正向的向后查找,它匹配紧接在数字前面的位置,然后[-+×÷*/]匹配字符类中的任何字符。

或者,在更一般的情况下,单词边界可能就足够了:

$list = preg_split ('~\b[-+×÷*/]~u', $number);

请参阅正则表达式演示。在这里,符号只会在字母、数字和 之后匹配_

于 2018-11-06T10:14:29.097 回答