我试图通过阅读旧问题和googles帮助来解决这个问题。
我在matlab中编写一个简短的脚本,用户在一个等式中键入,然后使用eval绘制数据。
但我想检查方程是否正确并使用正确的变量,所以......
我有三个变量,X,Y,Z大写,所以例如'X + Y-Z-7.5'是一个实体方程,但'XB-Z'不是。只是'X'也是一个坚实的“方程式”......
我该怎么写表达式?这就是我的......
regexp(test,'(X|Y|Z)$|(X|Y|Z|\d)&&(+|-|*|/|)')
我的下一个计划是做,
if regexp(test,'(X|Y|Z)$|(X|Y|Z|\d)&&(+|-|*|/|)') == 1
disp ('Correct')
end
所以我希望regexp返回如果字符串匹配整个表达式,而不仅仅是startindex。我也有问题解决这个问题。
拜托,我被困住了。
答案 0 :(得分:0)
一个可能的解决方案(如果你有符号数学工具箱)就是依靠它来确定方程式是否有效。
您可以使用symvar
提取等式中使用的所有符号,并将这些符号与您允许的变量进行比较。
allowed = {'X', 'Y', 'Z'};
vars = symvar(userinput);
tf = ismember(vars, allowed);
if ~all(tf)
disp('Invalid Variables Used');
end
这可能会比尝试创建正则表达式更加健壮,因为它依赖于MATLAB的内部解析器。