私の目標は、末尾のすべてのインスタンスをタグブラケット内の末尾の+に置き換えることです。置き換えられる行が次のようになっていると仮定します。
<h> aa- aa- </h> <h> ba- ba- </h>
その後は次のようになります
<h> aa+ aa+ </h> <h> ba+ ba+ </h>
最初に私はこの表現を試しました:
s/<h>(.*?)-(.*?)<\/h>/<h>$1+$2<\/h>/g;
これにより、次の出力が得られました。
<h> aa+ aa- </h> <h> ba+ ba- </h>
gオプションを使用すると、行ごとに複数の置換が行われますが、タグブラケットごとの最初のインスタンスに対してのみです(両方の丸括弧に疑問符が含まれている場合のみ)。
問題を絞り込むために、タグを無視して置換を実現しようとしました。表現
s/(.*?)-(.*?)/$1+$2/g;
確かに望ましい結果につながります
<h> aa+ aa+ </h> <h> ba+ ba+ </h>
もちろん、これはタグブラケットの外側でも置き換えられます。
では、最初の式の問題は何ですか。また、タグ括弧内で完全に置換するという目標をどのように達成できますか?