2016-09-05 6 views
0

私はそのようなコードブロックを持っており、emacsのquery-replace-regexpで修正しようとしています。は、動作するemacsで特定のquery-replace-regexpを取得できません。

fz.D(1,:) = Dcen;     
fz.vol(1,:) = (4/3)*pi*((fz.D(1,:)/2).^3);   
fz.POC(1,:) = Ac*fz.vol(1,:).^bc;   
fz.w(1,:) = cw*fz.D(1,:).^eta; 

% size - bin edges 
fzl.D(1,:) = Dlim;  

私はそれはように見てみたい:

fz.D(ind,:) = fz.D(1,:);     
fz.vol(ind,:) = fz.vol(1,:);   
fz.POC(ind,:) = fz.POC(ind,:); 

ので、第四に。

私は次のように、この変更を制定しようとしたが、

query-replace-regexpを実行 \(*\)(1,:) = *; -> \1(k,:) = \1(1,:);

を動作するようには思えないしかし、それは何もしないようです。

どのように私はこれを修正する必要がありますかに関する任意の提案?

答えて

2

私はemacsのを知りませんが、あなたの正規表現は、 '任意の長さの部分文字列に一致' 操作のための.*を使用する必要がある:

query-replace-regexpを実行\(.*\)\((1,:)\) = .*; -> \1(ind,:) = \1\2;

(これも

:あなたは置換テキストで繰り返したいパターンの一部の繰り返しを避けるために第2 \(\)グループの使用)

理由になります

正規表現では、*「前の項目の0以上」と一致する後置演算子です。前の項目が見つからない場合、それは平文*と一致します。したがって、式\(*\)(1,:) = *;は正確なテキスト*(1,:) =に続いて0以上のスペースが続いて;に一致しました。 .*を使用して0以上の.個のアイテム(.はいずれかの行末以外の文字と一致します)と一致するため、「何にでも一致」します。

+0

ああ、それは巧妙で簡潔な解決策です。また、理由を追加していただきありがとうございます。これらの正規表現は今、私にとってより意味をなさないようになり始めています。 – ohnoplus

関連する問題