我必须从列表中提取方程式,并用运算符(左和右)将其分开。 我遇到的问题是第一个或第二个字符是否定的。
例如:
$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-它不能正确地分割它-它经常将其分割。如果第二个是负数并减去它,则不会得出负数。 因此,我试图确定一个正则表达式以严格按运算符对它们进行拆分。
答案 0 :(得分:1)
似乎您可能会分割数字后面的运算符。
使用
$list = preg_split ('~(?<=\d)[-+×÷*/]~u', $number);
请参见this regex demo。 (?<=\d)
是一个正向后方匹配项,它与紧跟数字前面的位置匹配,然后[-+×÷*/]
匹配字符类中的任何字符。
或者,在更一般的情况下,word boundary可能就足够了:
$list = preg_split ('~\b[-+×÷*/]~u', $number);
请参见regex demo。在这里,符号仅在字母,数字和_
之后匹配。