Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 匹配字符(如果不是第一个字符)_Regex - Fatal编程技术网

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

Regex 匹配字符(如果不是第一个字符),regex,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.

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

例如:

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

似乎可以根据数字后面的运算符符号进行拆分

使用


看。在这里,符号仅在字母、数字和

之后匹配,并尝试
(?!^-[-+×**\/]+
,这似乎是可行的,但看看它,当表达式的第二个数字为负数时,它会遇到问题。Ie:36.24--24.58那么,你的期望是什么?请将所有细节添加到问题中。我已更新了问题以使其更加清晰,新问题是我没有预料到的。请尝试
“~\b[-+×÷*/]~u”
$list = preg_split ('~(?<=\d)[-+×÷*/]~u', $number);
$list = preg_split ('~\b[-+×÷*/]~u', $number);