2
如何在Matlab中找到匹配某個表達式的字符串中的最大可能模式。示例將闡明我的意思:正則表達式中的平衡括號
str = 'tan(sin*cos)';
str = 'tan(sin(exp)*cos(exp))';
我想查找模式,看起來像tan(\w*)
。但我希望tan
中的括號要平衡。有沒有辦法做到這一點?
如何在Matlab中找到匹配某個表達式的字符串中的最大可能模式。示例將闡明我的意思:正則表達式中的平衡括號
str = 'tan(sin*cos)';
str = 'tan(sin(exp)*cos(exp))';
我想查找模式,看起來像tan(\w*)
。但我希望tan
中的括號要平衡。有沒有辦法做到這一點?
沒有recusrsive正則表達式是不可能的。例如,這個字符串:
str = 'tan(tan(tan(x) + 4) + cos(x))'
將必須「由內而外」 regex'ed,有些事只有遞歸可以做。必要時
regexprep(str, 'tan', '')
和/或進一步分裂:
相反,我只是用一種更實用的解決方案。或者,正如範尼已經建議,只需使用一個循環:
str{1} = 'tan(x)';
str{2} = 'tan(sin(exp)*cos(exp)) + tan(tan(x) + 4)';
S = regexp(str, 'tan\(');
match = cell(size(str));
[match{:}] = deal({});
for ii = 1:numel(str)
if ~isempty(S{ii})
for jj = 1:numel(S{ii})
open = false;
start = S{ii}(jj)+4;
for kk = start : numel(str{ii})
switch str{ii}(kk)
case '('
open = true;
case ')'
if open
open = false;
else
match{ii}{end+1} = str{ii}(start:kk-1);
break;
end
end
end
end
end
end
通常我會使用遞歸正則表達式'(R?)',但Matlab的文件中沒有提及。你有可能使用簡單的循環來計算括號,而不是使用正則表達式嗎? –