人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Perlの正規表現を用いて置換をする際に、特定の文字列に置換するのではなく、マッチ部分の文字列を引数として関数に渡し、その返り値に置き換える、ということができたような気がしますがどうすればよいでしょうか?

●質問者: westfish
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Perl マッチ 引数 文字列 正規表現
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● villain
●35ポイント ベストアンサー

正規表現のeオプション(修飾子)でしょうか。


$str = "abcdef";
# ASCII 文字列を大文字にする
$str =~ s/(\w)/&func($1);/eg;
print "$str\n";
# 大文字変換
sub func {
return uc(shift);
}


eオプションはevalと同様にPerlスクリプトとして実行します。


修飾子について


2 ● backupper
●35ポイント

下記のような感じになると思います。

s/abc([^e]+)efg/func($1)/e

マッチ部分の文字列は置換部分で$1..9で参照できます。

e修飾子をつけると、置換部分で関数が評価されます。

http://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html

検索と置換において使うことのできる修飾子に評価修飾子s///eが あります。s///eは置換文字列をeval{...}でラップし、その評価結果を マッチした部分文字列の置換のために使います。s///eは置換テキストの 処理においてちょっとした計算を行う必要があるときに便利です。以下の例は ある行のキャラクタの出現頻度を数えます:

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ