0

こんにちは、条件マッチングに正規表現を使用する際に助けが必要です。

ex.my ファイルには次の内容があります {hello.program='function'`; bye.program='スクリプト'; }

正規表現を使用して、それらに含まれる文字列と一致させようとしてい.program='function'ます:

pattern = '[.program]+\=(function)'

も試したpattern='[^\n]*(.hello=function)[^\n]*';

pattern_match = regexp(myfilename,pattern , 'match')

しかし、これは pattern_match={} を返しますが、結果は hello.program='function'`; になると予想しています。

4

2 に答える 2

2

文字列マーカーが付属している場合'function'は、これらを一致に含める必要があります。また、ドットをエスケープする必要があります (そうしないと、「任意の文字」と見なされます)。[.program]+角括弧に含まれる 1 つまたは複数の文字を検索しますが、代わりに検索することもできますprogram。また、 - 記号をエスケープする必要はありません=(これがおそらくマッチを混乱させた原因です)。

cst = {'hello.program=''function''';'bye.program=''script'''; };
pat = 'hello\.program=''function''';
out = regexp(cst,pat,'match');
out{1}{1} %# first string from list, first match
   hello.program='function'

編集

コメントに応えて

私のファイルには

m2 = S.パラメータ;
m2.Value = matlabstandard;
m2.Volatility = '調整可能';
m2.Configurability = 'なし';
m2.ReferenceInterfaceFile ='';
m2.DataType = 'auto';

私の目的は、一致するすべての行を見つけることです.DataType = 'auto'

正規表現で一致する行を見つける方法は次のとおりです

%# read the file with textscan into a variable txt
fid = fopen('myFile.m');
txt = textscan(fid,'%s');
fclose(fid);
txt = txt{1};

%# find the match. Allow spaces and equal signs between DataType and 'auto'
match = regexp(txt,'\.DataType[ =]+''auto''','match')

%# match is not empty only if a match was found. Identify the non-empty match
matchedLine = find(~cellfun(@isempty,match));
于 2012-12-13T17:01:03.790 に答える
0

.program='function' と正確に一致するため、これを試してください。

    (\.)program='function'

これはうまくいかなかったと思います:

    '[.program]+\=(function)'

[] の仕組みのためです。ここに、私がそう言う理由を説明するリンクがあります: http://www.regular-expressions.info/charclass.html

于 2012-12-13T17:11:54.530 に答える