V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  klzhoushuai  ›  全部回复第 1 页 / 共 1 页
回复总数  5
2020-12-18 17:15:27 +08:00
回复了 klzhoushuai 创建的主题 问与答 有没有大神帮忙写个正则表达式匹配字符串中的运算式
@alex2019
好像有点问题,如果字符串为:a1=1&&a2=2&&a3=3&&(a4=1||a5=2||(a6=3&&a7=4 &&((a8+a9)/2>50 || a10/((a1+a2)*10)>20)))
解析出来的最后的一个表达式就有问题了吧:a10/((a1+a2*10>20)) ,正确的结果应该是:a10/((a1+a2)*10)>20
用 $string = preg_replace('/\)/', '', $string, $abs); 匹配时这个是从左到右匹配的
2020-12-18 14:03:38 +08:00
回复了 klzhoushuai 创建的主题 问与答 有没有大神帮忙写个正则表达式匹配字符串中的运算式
@klzhoushuai 用了一个比较笨的方法写的
2020-12-18 14:02:46 +08:00
回复了 klzhoushuai 创建的主题 问与答 有没有大神帮忙写个正则表达式匹配字符串中的运算式
/**
* 拆分公式
* @param $formula
* @return array
*/
public function splitFormula($formula)
{
$formula = $t = str_replace(' ', '', $formula);
$formula = str_replace(['&&', '||'], [';', ';'], $formula);

$result = explode(';', $formula);

foreach ($result as $key => $value) {
while (true) {
$left = substr_count($value, '(');
$right = substr_count($value, ')');

if ($left === $right) break;

if ($left > $right) {
$value = substr_replace($value, '', strpos($value, '('), 1);
} else {
$value = substr_replace($value, '', strrpos($value, ')'), 1);
}
}
$result[$key] = $value;
}
return $result;
}
2020-12-18 13:10:58 +08:00
回复了 klzhoushuai 创建的主题 问与答 有没有大神帮忙写个正则表达式匹配字符串中的运算式
@SmallTeddy
((a4a5+(a6+a7)/3)>10 || (a1 /((a2/100)(a2/100)))
向这种情况就不好拆分了
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3167 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 13:51 · PVG 21:51 · LAX 05:51 · JFK 08:51
Developed with CodeLauncher
♥ Do have faith in what you're doing.