• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perlで置換をするプログラムを作成したい )

perlで置換をするプログラムを作成したい

このQ&Aのポイント
  • ウエブの更新プログラムをperlで作成しています。以下の条件式でうまく置換できないときがあります。通常の文字は置換できたのですが、以下のようなリンクを変えようとすると結果が変わりませんでした。
  • プログラムを確認してみたところif($get_csv =~ /$oldcont/i)で条件式にうまくヒット出来ていない感じです。タグ禁止処理が悪さしているのがわかり、タグ禁止処理は解除いたしました。それでもなお動作しませんでした。
  • 何か不足しているものがありましたらご指摘ください。お手数かけます。ご指導をよろしくお願いいたします。

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

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.3

$oldcont に ? などの正規表現で使う文字が入っている場合は、 \Q と \E で挟んで正規表現と解釈されないようにするとよいです。 if($get_csv =~ /\Q$oldcont\E/i) { $get_csv =~ s/\Q$oldcont\E/$newcont/g; ... のような感じですね。

参考URL:
http://www.rfs.jp/sb/perl/02/09.html#%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E4%BF%AE%E9%A3%BE%E5%AD%90%E3%81%AE%E4%B8%80%E
hihin2003
質問者

お礼

回答ありがとうございます。 早速やってみました。 >if($get_csv =~ /\Q$oldcont\E/i) { >$get_csv =~ s/\Q$oldcont\E/$newcont/g; バッチリ動作しました!! ありがとうございます!! とっても助かりました。これで作業が進められます。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

>if($get_csv =~ /$oldcont/i) { >$get_csv =~ s/$oldcont/$newcont/g; これ、$oldcontを正規表現として評価しますから /?が 「/ が0または1個」と解釈されてます。 他のが動作したのはたまたまです。 任意の一文字を表す正規表現 . が、文字.と一致しただけです。 ためしに $oldcont = <a href="​....://hoge..../enta.html"> としても置き換わるはずです。

hihin2003
質問者

お礼

kmeeさん 回答ありがとうございます。 >>if($get_csv =~ /$oldcont/i) { >>$get_csv =~ s/$oldcont/$newcont/g; >これ、$oldcontを正規表現として評価しますから >/?が 「/ が0または1個」と解釈されてます。 そうなんですね。勉強になります。 私は、perlを使用してまもないのでこのような情報は本当にありがたいです。 いろいろと壁にぶち当たったときにここで助けていただいてます。 ありがとうございます。

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

条件式にうまくヒットしないときの、$get_csv の中身はわかりますか。 前後の不要な部分をカットして提示できないでしょうか。 if($get_csv =~ /$oldcont/i) { で大文字小文字を区別しないで比較していますが、 置き換えるところでは $get_csv =~ s/$oldcont/$newcont/g; のように大文字小文字を区別しています。 それが置き換わらない原因ということはないですよね。

hihin2003
質問者

補足

t-okuraさん 回答ありがとうございます。 >条件式にうまくヒットしないときの、$get_csv の中身はわかりますか。 はい。以下のものになります。 (ここから) <a href="http://hoge.com/entb.html">テストbooksb</a> <a href="http://hoge.com/entc.html">テストbooksc</a> <a href="http:/seibyou.sub.jp/au/?mov=3">テストbooks</a> <a href="http://hoge.com/enta.html">テストbooksa</a> <br> (ここまで) <a href="http:/seibyou.sub.jp/au/?mov=3">を置換出来ないです。 <a href="http://hoge.com/enta.html">は置換出来ました。 perlで使用する引数が悪さしているのでしょうか? すみません。お手数かけます。 よろしくお願いいたします。

関連するQ&A