Matlab 测试varargin是否存在字符串模式

Matlab 测试varargin是否存在字符串模式,matlab,validation,input,Matlab,Validation,Input,我有一个函数,它接受varargin,具有不同类型的灵活数量的输入。我想检查变量是否存在某个字符串/子字符串,例如 regexpi(varargin,'test'); 这适用于varargin={'a','b'},但如果存在其他数据类型,则会失败。我如何轻松(最少的代码行)得到一个逻辑矩阵来测试test的存在性?我想到了一个令人烦恼的问题: varargin={'a',1,'test',{2}; logi=num2单元(零(大小(varargin));%逻辑向量“是否存在字符串”; logi(

我有一个函数,它接受
varargin
,具有不同类型的灵活数量的输入。我想检查变量是否存在某个字符串/子字符串,例如

regexpi(varargin,'test');
这适用于
varargin={'a','b'}
,但如果存在其他数据类型,则会失败。我如何轻松(最少的代码行)得到一个逻辑矩阵来测试
test
的存在性?我想到了一个令人烦恼的问题:

varargin={'a',1,'test',{2};
logi=num2单元(零(大小(varargin));%逻辑向量“是否存在字符串”;
logi(cellfun(@isstr,varargin))=regexp(varargin(cellfun(@isstr,varargin)),“测试”);
%输出一个单元格数组,其中数字>0表示“已找到字符串”

您可以使用
isequal
进行快速修复

bTest = cellfun( @(x) isequal( x, 'test' ), varargin );
更详细的解决方案可能是使用
inputParser
和许多MATLAB函数中存在的标准“名称-值对”语法

function myFunc( varargin )
    % 'option' is the name of this optional parameter
    % varargin = {'option', 'test'}; 

    p = inputParser();
    p.addOptional( 'option', '' ); % Optional parameter, default to empty
    p.parse( varargin{:} );
    p.Results.option % = 'test' for the example varargin

我会使用这个,它与您的代码类似,但更简单:

varargin = {'abcd', 'efg', [1 2 3 4], {10; 20}};
pattern = 'bc';
result = cellfun(@(x) ischar(x) && ~isempty(regexpi(x, pattern)), varargin);

请注意,在匿名函数中使用
&&
如何防止将测试应用于非字符参数。

Edit:mmmmmmhh!我的印象是,匿名函数不允许使用
&&
运算符,这会带来大量新功能possibilities@user2305193很高兴你喜欢:-)如果第一个条件(ischar(x))是真的,有没有办法报告布尔值以外的值?我不知道你的意思。那有什么价值呢?匹配的起始位置?或者仅仅是基于
ischar
条件的附加布尔值?基本上我想要的是匿名函数中的if语句,if~isempty(x),return(x)
isempty(x)| | x
实际上不起作用