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

回答の条件
  • 1人2回まで
  • 登録:2006/06/06 00:44:59
  • 終了:2006/06/06 02:32:18

ベストアンサー

id:villain No.1

villain回答回数174ベストアンサー獲得回数122006/06/06 01:11:19

ポイント35pt

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


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


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


修飾子について

その他の回答(1件)

id:villain No.1

villain回答回数174ベストアンサー獲得回数122006/06/06 01:11:19ここでベストアンサー

ポイント35pt

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


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


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


修飾子について

id:backupper No.2

backupper回答回数95ベストアンサー獲得回数102006/06/06 01:41:54

ポイント35pt

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

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は置換テキストの 処理においてちょっとした計算を行う必要があるときに便利です。以下の例は ある行のキャラクタの出現頻度を数えます:

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません