Next: , Up: Match Data   [Contents][Index]


34.6.1 マッチしたテキストの置換

以下の関数は、最後の検索でマッチされたテキストのすべて、または一部を置換します。これはマッチデータにより機能します。

Function: replace-match replacement &optional fixedcase literal string subexp

この関数はバッファーや文字列にたいして置換処理を行う。

あるバッファーで最後の検索を行った場合には、string引数を省略またはnilを指定すること。また最後に検索を行ったバッファーがカレントバッファーであることを確認すること。その場合には、この関数はマッチしたテキストをreplacementで置換することにより、そのバッファーを編集する。これは置換したテキスト終端にポイントを残す。

文字列にたいして最後の検索を行った場合には、同じ文字列がstringに渡される。その場合には、この関数はマッチしたテキストがreplacementに置き換えられた新たなテキストをリターンする。

fixedcaseが非nilならreplace-matchは大文字小文字を変更せずに置換テキストを使用して、それ以外は置換されるテキストがcapitalize(先頭が大文字)されているかどうかに応じて、置換テキストを変換する。元のテキストがすべて大文字なら置換テキストを大文字に変換する。元のテキストの単語すべてがcapitalizeされていたら置換テキストのすべての単語をcapitalizeする。すべての単語が1文字かつ大文字なら、それらはすべて大文字の単語ではなくcapitalizeされた単語として扱われる。

literalが非nilならreplacementはそのまま挿入されるが、必要に応じてcaseの変更だけが行われる。これがnil(デフォルト)なら文字‘\’は特別に扱われる。replacement内に‘\’が出現した場合には、それは以下のシーケンスのいずれかの一部でなければならない:

\&

これは置換されるテキスト全体を意味する。

\n’ (nは数字)

これは元のregexpのn番目の部分式にマッチするテキストを意味する。この部分式とは‘\(…\)’の内部にグループかされた式のこと。n番目のマッチがなければ空文字列が代用される。

\\

これは置換テキスト内で単一の‘\’を意味する。

\?

これはそれ自身を意味する(replace-regexpと関連するコマンドの互換用。Regexp Replace in The GNU Emacs Manualを参照)。

これら以外の‘\’に続く文字はエラーをシグナルする。

\&’や‘\n’により行われる代替えは、もしあればcase変換の後に発生する。したがって代替えする文字列は決してcase変換されない。

subexpが非nilなら、それは全体のマッチではなくマッチされたregexpの部分式番号subexpだけを置換することを指定する。たとえば‘foo \(ba*r\)’のマッチング後にreplace-matchを呼び出すと、subexpが1なら‘\(ba*r\)’にマッチしたテキストだけを置換することを意味する。

Function: match-substitute-replacement replacement &optional fixedcase literal string subexp

この関数はreplace-matchによりバッファーに挿入されるであろうテキストをリターンするがバッファーを変更しない。これは‘\n’や‘\&’のような構文要素をマッチしたグループで置き換えた実際の結果をユーザーに示したいとき有用。引数replacement、およびオプションのfixedcaseliteralstringsubexpreplace-matchのときと同じ意味をもつ。