我试图使用regexp从模式中获取每个数字。困难的是我需要使用'names'参数,并且数字/字段的数量是未知的。
例如,我希望将''[10,20,30]''中的数字与regexp(...,'names')匹配,输出结构为字段'val1','val2', 'val3'(值10,20和30)。
像这样的东西:
>> match = regexp('[10,20,30]',expr,'names');
>> match.val1
10
>> match.val2
我玩了很多,我最接近的是使用动态表达式写入工作空间变量并为每个非空匹配增加后ID(例如'2'表示'val2')。
expr = ['(\ d +)(?@ if(〜isempty($&)),'...'if(~exvly(''j'',''var'')); j = 1;结束;的eval(的sprintf( '' match.val%I = $&; '',J));当J = J + 1; END)(?)“]; 正则表达式( '[1,2,3,4]',表达式)
然而,这并不令人满意,因为“匹配”不是实际输出。此外,它不验证字符串的开头('[')和结束(']')。
你知道有什么方法可以重现类似的东西
match = regexp('[1,2,3]','^ [(?<val1> \ d +),(?<val2> \ d +),(?<val3> \ d +)] $','names' );
但动态地,捕获模式中任何数字(> 0)的数字?
解决办法:
这不是names选项的工作原理。它不会给你喜欢不同的命名字段一个struct val1,val2等它会给你一个结构数组,每一个领域val。
例如:
>> str = '[10,20,30]';
>> expr = '(?<val>[0-9]*)*';
>> vals = regexp(str, expr, 'names')
vals =
1×3 struct array with fields:
val
>> vals(1).val
ans =
'10'
>> vals(3).val
ans =
'30'
如果你愿意,你可以操纵随后与领域单一结构此val1,val2等等。但我想,很可能是比结构数组不太方便vals,你已经有了。








暂无数据