• ベストアンサー

Perlのs///を使った置換で質問です

s///のパターンマッチ演算子を使った置換で、 <br>→<br /> に置換するときははどうしたらいいのでしょうか? ↓これでは<br />の/が引っかかってできないようです・・・。 $content =~ s/<br>/<br />/g;

  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

エスケープすればいいのでは。 $content =~ s/<br>/<br \/>/g;

drift-silvia
質問者

お礼

できました。ありがとうございます。

その他の回答 (1)

  • kiki_s
  • ベストアンサー率59% (147/248)
回答No.2

スラッシュ以外の区切り文字を使う事が出来ませんか? $content =~ s#<br>#<br />#g; とか $content =~ s%<br>%<br />%g; 確か出来たような記憶が・・・

関連するQ&A

  • 置換演算子についての疑問

    お世話になっております。horagaiです。質問160286 http://oshiete1.goo.ne.jp/kotaeru.php3?q=160286 と同じようなことをやりたかったので回答#2のやり方を 試してみました。そこでいろいろ疑問が出てきたので教えていただきたいと思います。 (1) $num=<> ; while($num =~ s/(.*\d)(\d\d\d)/$1,$2/g){;} print "num=$num\n"; とするとたしかにうまくいくのですが、これでうまくいく理由がわかりません。 置換演算子が後ろからパターンマッチをしていくのだとすればわかるのですが。 前からだとするとたとえば123456は最初に(1)(234)56で引っかかって1,23456 。 次に (1,2)(345)6 で引っかかって1,2,3456 ・・・。 などとなりそうな気がします。 (2) またwhileを使わずに $num =~ s/(.*\d)(\d\d\d)/$1,$2/g; としてみると 例えば入力が 12345678 とすると num=12345,678 と最初の3桁しか区切ってくれません。マニュアルを見ると 「gオプションは出現したパターンをすべて置換する。」 と書いてあるのにどうしてでしょう。 前からマッチするせよ後ろからマッチするにせよカンマが1つしか 入らないということはないと思うのですが。 以上、私が根本的な勘違いをしているかも知れませんので その辺のところもご指摘いただければ幸いです。 ちなみにOSはLinux.Perlのバージョンは5.004です。

    • ベストアンサー
    • Perl
  • Perl正規表現s置換演算子の末尾にカンマについて

    お世話になります。 Perl正規表現プログラムで、 s置換演算子の末尾に、 カンマと丸カッコでスカラ変数を囲んで、 存在している箇所 たとえば、 s/あいうえお/($hensu = $&) =~ tr{ABC}{abc}, ($hensu) =~ s{123}{123}, ($hensu) /eg; のような正規表現であれば、 上記のtr置換演算子や、s置換演算子それぞれの末尾に、 「 , ($hensu) 」 として、カンマと丸カッコでスカラ変数を囲んで、 存在している箇所は、 どのような意味があるのでしょうか? 以上になります。 PS: ネット上や正規表現の本などを読んでも、 上記したような、 カンマと丸カッコでスカラ変数を囲んでいる パターンの解説を、 見つけられなかった為、 ご質問させていただきました。 ご存じの方がいらっしゃいましたら、 教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 文字列の置換

    JAVAであるファイル内の文字列を置換するプログラム(日本語)を作りたいのですが、 ・ ・ String h_s; FileReader h_fr = new FileReader(in_filename); BufferedReader h_br = new BufferedReader(h_fr); while(true){  h_s = h_br.readLine();  if (h_s == null){   break;  }  ●文字列を置換するプログラム● } ・ ・ ここの●文字列を置換するプログラム●にあたる適当な関数って何かありますか? たとえばperlでいうと↓みたいなものなのですが・・・ s/置換前文字/置換後文字/g よろしくお願いします。

    • ベストアンサー
    • Java
  • パターンマッチと置換

    パターンマッチと置換を利用して 文章中の >○○○{△□☆} という部分を <×××>△□☆ に変えたいのですが、どのようにかいたらいいのか 教えて下さい。

    • ベストアンサー
    • Perl
  • viでの置換

    if($b =~ /(?=A?B{1,2})/){  print "b\n"; } この文章中で?=の=だけ!に置換したいのですが :%s/?=\&=/!/g だとE486: パターンはみつかりませんでした: ?=\&=と表示されました. ですが, :%s/=A\&=/!/g だとうまくいきました.?がエスケープされてないから(素人目線ですが)と思い :%s/\?=\&=/!/g とすると E64:\? の後になにもありません E476: 無効なコマンドです 続けるにはENTERを押すかコマンドを入力してください となりました.なぜ:%s/?=\&=/!/gではダメなのでしょうか?

  • Perlでの改行コードについて

    <textarea>に入力された値をPOSTで渡し、ポスグレに書き込み、それをHTML上で表示する処理をしているのですが。 textareaで改行を入力した場合に、 DB内に改行が登録されません。 例: *textareaのwrapはsoftに設定してあります。 あいうえおかきくけこ さしすせそ と入力すると。 DBには 「あいうえおかきくけこ さしすせそ」 と登録され 表示では「あいうえおかきくけこさしすせそ」と表示されます。 ソースでみると 「あいうえおかきくけこ さしすせそ」と表示されています。 改行コードの置換がされていないのだと思い INSERT前に s/\r\n/<BR>/g; s/\r/<BR>/g; s/\n/<BR>/g; を使い置換をすると DBには何も登録されません。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 入力したテキストを置換するプログラミングを作りたいのですが上手くいかず

    入力したテキストを置換するプログラミングを作りたいのですが上手くいかず困っています。 テキストエリアに文章を入力し、 次に置換前の文字と置換後の文字をそれぞれ入力する形にして置換をしようと考えています。 最終的に置換前の文字と置換後の文字を入力する欄を複数用意して 複数の置換を一度で行ないたいと思っています。 ですが下記の「a1」に入力した置換前の文字全て削除され「a2」の内容に変換されません。 初心者なので根本的に間違ってるかもしれませんが、わかる方よければ教えてください。 ----------------- <form method="post" action="form.cgi"> <textarea name="chikan" rows="10" cols="70"></textarea><br> <input type="text" name="a1" size="50">を<input type="text" name="a2" size="50">に変換<br><br> </p> <p><input type="submit" value="置換"></p> </form> ----------------- ----------------- #!/usr/local/bin/perl if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $alldata, $ENV{'CONTENT_LENGTH'}); } else { $alldata = $ENV{'QUERY_STRING'}; } foreach $data (split(/&/, $alldata)) { ($key, $value) = split(/=/, $data); $value =~ s/\+/ /g; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg; $value =~ s/\t//g; $value =~ s/\n//; $in{"$key"} = $value; $in{'chikan'} =~ s/\Q$in{'a1'}\E/$in{'a2'}/g; } print"Content-type: text/html\n\n"; print <<"EOM"; <html> <head><title></title> </head> <body> <textarea name=area rows=50 cols=70> $in{'chikan'} </textarea> </form> </body> </html> EOM exit; -------------------------

    • ベストアンサー
    • CGI
  • 置換演算子

    量子力学を勉強していたら、置換演算子という言葉が出てきました。この置換演算子って何ですか?どなたか教えてください。

  • ”ァー”が含まれている文字を置換すると文字化け

    OS:solaris8 perlのver:5.8.6 perlで、”ァー”が含まれている文字列に対し、 全角スペースを半角スペースに置換しようとすると 文字化けしてしまいます。 (”ぁー”でもどうようでした) ”ぃー”や”ぅー”、”ぁ”では 問題無いのですが…。 当方、perl初心者&文字コードに詳しくないため、 原因がよくわからないでいます。 どなたか原因をおわかりの方、 ご教授お願いいたします。 文字コードはEUCです。 以下はソースです my $line = "ファイヴァー スコープ 眼鏡"; $line =~ s/\t/ /g; # タブを半角スペースに置換する print '$line2='.$line."<br>\n"; $line =~ s/ / /g; # 全角スペースを半角スペースに置換する print '$line3='.$line."<br>\n"; #↑ここで文字化けしてしまいます $line =~ s/^\s+//; # 頭の空白を除く print '$line4='.$line."<br>\n"; $line =~ s/\s+$//; # 尻の空白を除く print '$line5='.$line."<br>\n";

    • ベストアンサー
    • Perl
  • sedでカンマ区切りの列の置換を行いたい

    以下の様なファイルがあります。 sedコマンドを使用して、カンマで区切られたn番目のカラム目を 置換したい場合どうすればよいでしょうか。 "1","2","3","4","5","6" "1234","12","34567","abcd","efg","hi" "a c","d f","12 34","0","AAA","" "g i","j l","45 67","0","BBB","2021" "m o","p r","3 2 1","1","ABC","" "123","456","","abc","efg","hij" ①1カラム目以外置換(1カラム目以降削除) sed 's/\(.*\),.*,.*,.*,.*,.*/\1/g' test.csv ②最後の6カラム目以外置換(6カラム目以外削除) sed 's/.*,.*,.*,.*,.*,\(.*\)/\1/g' test.csv ③3カラム目を置換(3カラム目を「""」だけにしたい) sed -e 's/\(.*\),\(.*\),.*,\(.*\),\(.*\),\(.*\)/\1,\2,"",\3,\4,\5/g' test.csv とできたのですが、 表現がないというか、置換対象文字列の条件、表現が長いというか、全カラムを指定しているので、 少し、短くできないものでしょうか。 ①パターン sed 's/\([^,]*\),.*/\1/g' test.csv ②パターン sed "s/.*,\([^,]*\)$/\1/g" test.csv の様にできました。 ③パターン 思いう浮かばず これで、できているので間違いはないかとおもいますが、 どうなのでしょうか。 なにかいい案はないでしょうか?

専門家に質問してみよう