正则表达式MATLAB

时间:2016-02-06 17:06:11

标签: regex matlab

我试图通过阅读旧问题和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。我也有问题解决这个问题。

拜托,我被困住了。

1 个答案:

答案 0 :(得分:0)

一个可能的解决方案(如果你有符号数学工具箱)就是依靠它来确定方程式是否有效。

您可以使用symvar提取等式中使用的所有符号,并将这些符号与您允许的变量进行比较。

allowed = {'X', 'Y', 'Z'};
vars = symvar(userinput);

tf = ismember(vars, allowed);

if ~all(tf)
    disp('Invalid Variables Used');
end

这可能会比尝试创建正则表达式更加健壮,因为它依赖于MATLAB的内部解析器。