匹配字符(如果不是第一个字符)

时间:2018-11-06 08:21:36

标签: regex

我必须从列表中提取方程式,并用运算符(左和右)将其分开。 我遇到的问题是第一个或第二个字符是否定的。

例如:

$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-它不能正确地分割它-它经常将其分割。如果第二个是负数并减去它,则不会得出负数。 因此,我试图确定一个正则表达式以严格按运算符对它们进行拆分。

1 个答案:

答案 0 :(得分:1)

似乎您可能会分割数字后面的运算符。

使用

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

请参见this regex demo(?<=\d)是一个正向后方匹配项,它与紧跟数字前面的位置匹配,然后[-+×÷*/]匹配字符类中的任何字符。

或者,在更一般的情况下,word boundary可能就足够了:

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

请参见regex demo。在这里,符号仅在字母,数字和_之后匹配。