• ベストアンサー

置換文字列の中に"?"があると置換できません。

恐れ入ります。 ?”クエスチョンマーク”の置換をしたいのですが できなくて困っています。 例 #!/usr/bin/perl $a='a?a'; $b='bbba?abbbbaaaabbbbabbbbb'; $b=~ s/$a//g; print "$b\n"; 文字列$bから”a?a”を削除しようとしているのですが、 変化しません。 ためしに\?としてみましたが・・・だめでした。 ?を!に変えたい!とかいう人は絶対いると思い 「クエスチョンマーク 置換」 等で検索したのですが、 「0個(=1個もない)、または1個ある場合」を表している」 等の情報ばかりでした・・・ どうか教えてください。。。

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

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

  • ベストアンサー
  • Ceren
  • ベストアンサー率49% (90/183)
回答No.2

> $a='a?a'; の部分を $a='a[\?]a'; とするか、 $a=quotemeta('a?a'); とすれば期待通りの動作をすると思います。

azicyan
質問者

お礼

ああああああ!! すごいです!!! こんな便利なコマンドがあったのですね! ばっちりです。 感謝します!!

その他の回答 (1)

回答No.1

#!C:\Environment\Perl\v5.8.8\bin\perl.exe #正規表現のエスケープ #http://crocro.com/pc/write/hide/chimarl09_01.html#06 $a='a\?a'; $b='bbba?abbbbaaaabbbbabbbbb'; $b=~ s/$a//g; print "$b\n";

azicyan
質問者

お礼

説明が足りずに 申し訳ありませんでした。

azicyan
質問者

補足

実は$aは ユーザーの入力から得たいので・・・

関連するQ&A

  • join と split で文字列を操作する場合

    にんにちは、 うまく解決する方法を思いつかないので、質問させてください。 以下のスクリプトを実行すると、a から z を * で join して、 その後、* で split するかなと思ったら、split は正規表現として とらえるためでしょうか、エラーになります。 #! /usr/bin/perl -w use strict; my $a = '*'; my $b = join $a , ('a'..'z'); print "$b\n"; my @result = split /$a/,$b; print "$_\n" foreach @result; exit(); $a = '\*'; にすると、split したときに、 余計な \ が残ってしまいます。 任意の(書く時点では分からない)いろんな文字列で 連結したり分割したりする場合のスマートな方法が ありましたら、教えていただけませんか? Perl 5.8 です。お願いします。

    • ベストアンサー
    • Perl
  • 文字列のマッチについて

    下記cgiで+、*、?が含んでいるとマッチしないんですが 正しいマッチのさせ方を教えてください。 それと+*?以外にもマッチしない文字があるのでしょうか? ---実行結果--- yy+yyは含んでいない yy*yyは含んでいない yy/yyは含んでいる yy-yyは含んでいる yyyyは含んでいる yy1yyは含んでいる yy=yyは含んでいる yy?yyは含んでいない yy&yyは含んでいる yy yyは含んでいる yy.yyは含んでいる ---Perl--- #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<html><head><title>counter</title></head>\n"; print "<body>\n"; @data = ('yy+yy', 'yy*yy', 'yy/yy', 'yy-yy', 'yyyy', 'yy1yy', 'yy=yy', 'yy?yy', 'yy&yy', 'yy yy', 'yy.yy'); foreach $a (@data) { $b = $a; if ($b !~ m/$a/){ print "$aは含んでいない";print "<br>"; } else{print "$aは含んでいる";print "<br>";} } print "</body></html>\n";

    • ベストアンサー
    • Perl
  • 変数表示について

    #! /usr/bin/perl $a='$b$c'; $b='abc'; $c='-def'; print "$a\n"; このようなプログラムで 結果が abc-def という結果にしたいと思い上記のようなプログラムを 作りましたが 結果として表示されたのは $b$c というものでした。 「abc-def」という結果を表示するようにするのは 無理でしょうか? やはり正規表現で文字列を置換してやる必要があるのでしょうか?

    • ベストアンサー
    • Perl
  • ”ァー”が含まれている文字を置換すると文字化け

    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
  • Rubyで\を\\に置換したい。

    Rubyで"\"マークを"\\"に置換しようとして、以下の様に プログラムを書きましたが、うまくいきません。 "\\aaa"となるようにするには、どうしたらよいでしょうか? %cat aa.txt \aaa %a aa.txt \aaa %cat a #!/usr/bin/ruby while l = gets print l.gsub(/\\/,'\\\\') end

  • 文字化け

    下記のようなcgiスクリプトがあり、test1.cgi から リンクの test2.cgiを呼ぶと 「リンドウ」が文字化けしてしまいます。 文字化けしないようにするには、どうしたらいいでしょうか。 Perl cgi 初心者です。 --------test1.cgi----------------------------------------- #!/usr/bin/perl print "Content-Type: text/html; charset=EUC-JP\n\n"; $name="リンドウ"; print "name=$name<br>"; print "<a href=\"test2.cgi?aaa,${name},bbb\">test2.cgi</a>\n"; ---------test2.cgi------------------------------------------------- #!/usr/bin/perl print "Content-type: text/html; charset=EUC_JP\n\n"; $query = $ENV{'QUERY_STRING'}; print "query=$query\n";

    • ベストアンサー
    • CGI
  • 文字列の置換で・・・

    Javaでの文字列の置換についてなんですが ある文字を任意の文字に置換し表示させるとともに 何個の文字を置換したかも同時に知らせたい場合は どのような処理をしたらよいでしょうか? ぜひご協力よろしくお願いします!! (例)入力した文字列に"a"が含まれる場合は"b"に置換し   その際に変換した文字数も表示してください。     basic→出力結果: "bbsic" 置換した文字数は1です。

    • ベストアンサー
    • Java
  • 複数ファイルの文字列置換の方法について

    あるディレクトリ内にある全てのテキストファイルの中から、「A」という文字列を「B」に置換したいのですが、秀丸もしくはPerlなどで簡単にできますでしょうか? ご存知の方、教えて下さい。 宜しくお願いします。

  • 文字列置換について

    4901777␣品名A␣規格A␣日付␣␣␣␣␣6280␣␣␣␣7780 4901879␣品名B␣規格B␣日付␣␣␣␣␣6887␣␣␣␣9856 のような文字列があります。 【品名】と【規格】の間の半角空白を置換し 4901777␣品名規格␣日付␣␣␣␣␣6280␣␣␣␣7780 のように置換したいのですが正規表現ではどのように表したらいいでしょうか? ・【品名】と【規格】は全て大文字 ・【品名】と【規格】の箇所は文字列の始まり文字は不確定

  • ExcelVBAでの文字列置換について

    ExcelVBAでの文字列置換について ExcelVBAは全く初心者のですが、下記の処理を早急に行う必要があり、質問させていただきます。 物品の使用者をエクセル管理しています。 シート1のA列に物品名、B列に現使用者名を入力しています。(約2000件) 一部の使用者に変更があった場合に、シート2に振替リストを シート2 A列=現使用者 B列=新使用者 と作成しています。 シート1のB列:現使用者から、シート2のA列:現使用者と同一な文字列を検索し、シート2B列:新使用者に置換するマクロはどのように書けばよいのでしょうか? 可能であれば、シート2のC列に置換結果を表示させたいです。

専門家に質問してみよう