関数索引
replaceAll() 関数と replaceFirst() 関数は、文字列の中の特定のパターンを、他の文字列で置き換えたい時に使用します。replaceAll() 関数は、該当するパターンをすべて置き換えます。replaceFirst() 関数は、最初に見つかったパターンについてのみ置き換えを行います。パターンの指定には正規表現を使うことができます。
操作したい文字列を指定します。
exp:置き換えたい部分のパターンを正規表現で指定します。正規表現に使える記号は Appendix の「正規表現」ページに掲載されています。
また、正規表現の高度な使い方については本マニュアルでは記載しきれません。ぜひとも関連する書籍などを参照してください。
regexp で指定したパターンにマッチした部分を置き換える文字列を指定します。この文字列中に $1 $2 ... $n という表記を使うことで、その部分は、regexp で指定した「先方参照を行う正規表現グループ」つまり (...) と括弧でくくった部分で置き換えることができます。
パターン中の正規表現グループを参照しないで、$1 という文字列そのもので置き換えたい場合には \$1 というように $ 記号を \ (バックスラッシュ)でエスケープしてください。また、バックスラッシュ自体を置き換えパターン中に含めたい場合は \\ というようにバックスラッシュを二つ続けて指定してください。
"abcdefgabcdefg" という文字列の "cde" の部分を "1234" で置き換えます。
<body>
......
%replaceAll("abcdefgabcdefg", "cde", "1234")%
.....
</body>
結果は "ab1234fgab1234fg" になります。replaceAll はマッチするパターンに対応する部分をすべて置き換えます。
文字列中の改行コードをすべて削除してみます。
%replaceAll(text, "\r|\n", "")%
改行コード \n と \r をすべて空文字列に置き換えています。
"abcDefgabCdefg" という文字列の "cde" の部分を "1234" で置き換えます。
<body>
......
%replaceAll("abcDefgabCdefg", "(?i)cde", "1234")%
.....
</body>
結果は "ab1234fgab1234fg" になります。
大文字と小文字を区別せずに置換するために i フラグを指定しています。i フラグは ASCII 文字に対してだけ大文字と小文字の区別をなくす効果があります。Unicode 全域で大文字と小文字の区別なくパターンマッチングを行ないたい場合には u フラグを使用します。
全角文字で与えられた文字列 "ABCDEFGabcdefg" という文字列の "cde" の部分を "1234" で置き換えます。
<body>
......
%replaceAll("ABCDEFGabcdefg", "(?u)CdE", "1234")%
.....
</body>
結果は "AB1234FGab1234fg" になります。
Unicode 全域で大文字と小文字の区別なくパターンマッチングを行なうために u フラグを使用しています。
等号の右辺と左辺を入れ替えてみます。置き換えパターン中に $n を指定して、マッチしたパターンを置き換えパターン中で参照してみます。
<body>
......
%replaceAll("1024 * 4 = 4096", "(.*)=(.*)", "$2=$1")%
.....
</body>
結果は "4096=1024 * 4" となります。
パターン "(.*)=(.*)" の左側の(最初の) "(.*)" は一つめの「先方参照をおこなう正規表現グループ」であり、"1024 * 4 " の部分にマッチします。右側の(二つめの)"(.*)" は二つめの「先方参照をおこなう正規表現グループ」であり、" 4096" の部分にマッチします。
置き換えパターン中の $1 は、一つめの正規表現グループのマッチング結果の "1024 * 4 " を表しています。同様に、$2 は、二つめの正規表現グループのマッチング結果の " 4096" を表しています。
文字列中のカタカナ部分を強調表示します。
<body>
......
%replaceAll("文字列中のカタカナ部分を括弧に入れて表示", "(\p{InKatakana}+)", "「$1」")%
.....
</body>
結果は「文字列中の「カタカナ」部分を括弧に入れて表示」になります。
InKatakana という Unicode のコードブロック名を使って文字種を判定しています。Unicode にはたくさんのコードブロック名やスクリプト名が定義されています。どの名称がどの文字を含んでいるのかについては Unicode 規格を参照して調べてください。
以上の利用例では、操作対象文字列はすべてリテラル(ダブルクオートで括られた文字列)でしたが、この部分にはもちろん、要素(1行文字列や複数行の文字列など)を使用することができます。