• ベストアンサー

文字の置換に関しての質問です

いつもお世話になります 正規表現もしくはPerlスクリプトを用いて文字を置換するコードの書き方を教えて 頂けないでしょうか 具体例 $filename = hoge.gifを $filename = hoge.cgiという具合に変更したいのですが 宜しく御教授お願いします。

  • Perl
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

$filename =~ s/\.gif/\.cgi/; です。 $filename ~= s/\.gif/\.cgi/; ですと、右辺をビット反転、の意味になってしまいます。

goodjob_001
質問者

お礼

お世話になります UsadaYusukeさん 期待通りの結果が得られましたありがとうございました。

その他の回答 (2)

回答No.3

#1です。 失礼しました。 =~と~=を打ち間違えてました。

回答No.1

$filename ~= s/\.gif/\.cgi/; "\."は、"."が任意の一文字じゃなくてピリオドそのものだという意味。(\は環境によっては、バックスラッシュ) で、.gifを.cgiに置換します。(.からにしないと、たまたまhogeにgifという文字列が含まれていた場合に誤動作する。)

関連するQ&A

  • メタ文字の置換

     いま、半角の[が含まれているテキストがあります。  このテキスト中の[を、別の文字に置換したいと思っています。具体的には、全角の【に置換したいのですです。  [は正規表現上メタ文字になるためか、うまくいかないのです。マッチしないのです。s/でもtr/でもだめなんです。  どなたか、[を【に置換する表現を教えてください。

  • ファイル内の文字列を置換

    掲示板利用させていただきます。 現在、ファイル内の特定の文字列を置換し、 保存する方法を探しています。 できればスクリプト言語を利用したいと考えています。 sedコマンドを使用して文字列置換を行ったのですが 置換前と置換後のファイルで 文字コードと改行コードが変わってしまうのでダメでした; 「ファイル内の特定の文字列を任意の文字列に置換し、置換前と置換後で改行コードと文字コードを変えない方法」 をご存知の方、ご教示ください。 bash,perl,javaのどれでも結構です。 よろしくおねがいします。

  • Perlで可変長の先読み戻り読みができない

    Perlスクリプトで、以下のような置換をしようとしています。 置換前 piyo … fuga … piyo 【piyo … fuga … piyo … hoge … piyo】 fuga … piyo 置換後 【ぴよ】 … fuga … 【ぴよ】 【piyo … fuga … piyo … hoge … piyo】 fuga … 【ぴよ】 【】が入れ子にならないように、【】の外の部分でだけマッチ、置換しようと正規表現を考えていたのですが、いくらやってもできません。調べていたら、Perlでは可変長の先読み戻り読みをサポートしていないらしいことがわかりました。 正規表現一つでも、複数行のスクリプトでも構いません。どのようにすればよいでしょうか。

  • 正規表現を使った置き換えにおいての質問。置き換えたい文字列が変数だったら。

    こんにちは、 以下のような作業をperlで正規表現の置換を用いて行いたいのですがどのようにすればよいのでしょうか。 ===================================== $iが1-3までの数字をしめしています。 また、 $filename[1]='./gazou1.gif' $filename[2]='./gazou2.gif' $filename[3]='./gazou3.gif' のような配列変数があるとします。 以下のようなテキスト文章を $1$ $2$ $3$ 次のように変換します。 <img src="$filename[1]"> <img src="$filename[2]"> <img src="$filename[3]"> $filename[1-3]には画像のパス名がはいっているので、最終的出力されるときには <img src="gazou1.gif"> <img src="gazou2.gif"> <img src="gazou3.gif"> となるようにしたいです。 このような作業を行う置換操作はどのようにすればいいのでしょうか。 次のようにしてみましたが、できません。 for($i=1;$i<4;$i++){ $main_body=~ s/\$[$i]\$/<img src="$filname[$i]">/g; } ちなみに、これを実行すると <img src="">となり、何も入りません。 置換したい単語が変数だったらできないのでしょうか? 回答よろしくお願いします。

    • ベストアンサー
    • Perl
  • 正規表現でエスケープ文字の置換

    正規表現でエスケープ文字(&nbsp;等)を別の文字列に置換しようと思い、「/&.+;/」というパターンを作成したのですが、エスケープ文字が連続する場合(&nbsp;&lt;)1文字に置換されてしまいます。 正規表現をご存知の方、ご教授ください。

  • フォルダ内のファイルを全て開き文字列置換

    こんばんは。Perl超初心者です(プログラミングの初心者でもあります)。 フォルダ内にあるすべてのファイルに対して、正規表現を使った文字列置換をしたいのですが、うまくいきません。アドヴァイスをいただけないでしょうか。 具体的には、あるファルダの中に100個程のファイルがあって、その中の改行が3回連続している部分を、「改行+[SAMPLE]+改行」に置換をしたいと表います。 Windows XP Professional SP3 / ActivePerl 5.10 の環境で、以下のように記述したのですが、「Missing $ on loop variable at insert.pl line 5.」とエラーになってしまいます。どこで、間違ったのでしょうか(というか、まるでダメなスクリプトかもしれませんが…)。 use strict; use warnings; my @filename = glob "*.txt"; foreach open(FILE, "$filename(@filename)") { my @content =<FILE>; @content =~ s/\n{3}/\n[SAMPLE]\n/g; print FILE @content; close(FILE); } どなたか、ご教示いただけると非常助かります。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 正規表現でタグを関数に置換

    お世話になります。 携帯向けの絵文字コンバートライブラリを使いたいのですが 現状DBに格納されている文字列が 文中に絵文字代用のgifをイメージタグで呼び出しているような内容です。 そこで <img src="./emoji/F95B.gif"> を 正規表現を使ってうまいこと $MobileClass->Convert("F95B") といった具合に置換をかけたいのですがなかなか上手く行かず詰まっております。 どなたか、この場合の正しい書き方をご教授お願いいたします。

    • ベストアンサー
    • PHP
  • sedコマンド置換について(マッチした数字を演算に再利用したい)

    こんにちは Linuxのsedコマンドについて質問させてください。 軽く検索をかけたりUNIXのコマンド本を調べましたが、わかりませんでした。 例えば正規表現でマッチした数字を2倍して返す処理をする場合 perlではhogeという文字列に対して  hoge=~s/(\d+)/$1*2/g; このような処理で実現できると思います。 このように今マッチしたものに対して何か処理を行って置換するということは sedコマンド、もしくはそれを使ったシェルスクリプトで処理することは可能でしょうか? sedの方が処理速度が速いので、こちらを使いたいのです。

  • Excel : タグ付き正規表現による文字置換は可能?

    アクティブセルの文字を、正規表現を利用して文字置換をしたいと考えています。 ただ、単純な文字置換ではなく、正規表現にマッチした文字列を記憶して、 置換後の文字列として呼び出して利用します。 秀丸エディタにあるような「タグ付き正規表現」を利用したいです。 Excelでも同じようなことは可能なのでしょうか? 一例として挙げますと、次のような文字置換です。 ●「?」の後に全角スペース以外の文字がある場合には、「?」の後に全角スペースを1つ入れる。 ●「?」の後に全角スペースが複数続く場合には、「?」の後の全角スペースを1つだけにする。 つまり、★を全角スペースとすると、次のようになります。 あいう?あいう   → あいう?★あいう あいう?★★あいう → あいう?★あいう さらに、一例を挙げますと、 ●「AさんはBさんの友達です」というような文章を、「BさんはAさんの友達です」にする。  つまり、AとBに相当する部分を入れ替える。 よろしくお願いいたします。

  • 謎の文字列置換(正規表現)

    漢字かな、アルファベット(全角)、数字(半角)の混在した文章中で、二桁の数字のみ文字の前後に記号(例:♪)を付けたいとします。 正規表現に対応した置換ソフトやテキストエディタで 置換前:\b(\d{2})\b 置換後:♪$1♪ とすると、特定の文字の後ろにある二桁数字のみ検索から漏れて置換されないのですが、どこが間違っているのでしょうか。 <使用したテキストエディタ> k2editor <使用した置換ソフト> Speeeeed <置換から漏れる特定文字> 学、浜、工、田、修など <具体例>置換前 23 学23 23学 2323 浜23浜 <具体例>置換後 ♪23♪ 学23 ♪23♪学 2323 浜23浜

専門家に質問してみよう