• ベストアンサー

置換

\beginを<start>に置換するのを、 s/\\begin/<start>/; ・・・・・* と書いているのでが、 \\を<k>と置換するのには、どう書いたらいいのでしょうか。 s/\\/<k>/;と書くと、*における\\まで置換されて 困っています。 よろしくお願いします

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

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>変換されずに\\のままのところが残ってしまいます s/\\/<k>/g; か s/\\/<k>/go; でやります。 gオプションは、該当するものを全て置き換えます。 付けない場合、最初に見つかったものを置き換えますので、それで、残るモノがあるのだと思います。 oオプションは、正規表現を毎回評価しない(内部表現にかえる、)ので繰りかえし作業する場合に多少効率がよくなります。

mighty5
質問者

お礼

うまくいきました! どうもありがとうございました。 本当に助かりました!感謝致します。

その他の回答 (3)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.4

>> s/\\(?!begin)/<k>/ > \begin以外にも\から始まる要素がたくさん > あるときはどうしたらいいのでしょうか。 そのような場合は、それらのパターンを | で区切って並べます。例えば、\begin、\end、\etc でない \ を <k> に置換するには次のようにします。 s/\\(?!begin|end|etc)/<k>/ ただし、この方法はあまり効率がよくないので、他の置換を先に行い、最後に \ → <k> の置換をする方がよいでしょう。 > うまく<k>に変換されるのと、変換されずに\\のままのところが残ってしまいます。どうしたらうまくいくでしょうか。 置換オプションに g を指定してみてください。g は global の意味で、マッチするパターンを全て置換します。 これを指定しない場合、最初に見つけたパターンだけしか置換されません。 s/\\/<k>/g ※もしこれでもダメな場合は、再現するスクリプトを提示してください。

mighty5
質問者

お礼

うまくいきました!どうもありがとうございます。 >s/\\(?!begin|end|etc)/<k>/ に書くのですね。勉強になりました。 >ただし、この方法はあまり効率がよくないので・・・ はい。最後に置換することに致しました。 本当に助かりました。感謝致します。

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

No.1さんの回答でOKだと思いますが、もし何らかの理由で*より先に s/\\/<k>/ をしなければならない場合、次のようにすることで \begin を置換対象から外すことができます。 s/\\(?!begin)/<k>/ この「/パターン1(?!パターン2)/」というのは、直後にパターン2がないパターン1にマッチする正規表現です。

mighty5
質問者

お礼

早速の回答、ありがとうございます。 このような書き方もあるのですね。すごいです…。 勉強になります。 >s/\\(?!begin)/<k>/ \begin以外にも\から始まる要素がたくさん あるときはどうしたらいいのでしょうか。 実は、書いてるプログラムは、 s/\\begin/<start>/; ・・・・・* のほかにもs/\\○×□/<△☆>/; というのが何行かありまして、 最後にs/\\/<k>/;をしてみました。 あるテキストファイルを読み込んで、このプログラムで変換しようとしているのですが、そのテキスト中には、\\がところどころにあって、上記のような変換のプログラムでやってみると、うまく<k>に変換されるのと、変換されずに\\のままのところが残ってしまいます。どうしたらうまくいくでしょうか。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

*を実施した後で 実施する

mighty5
質問者

お礼

早速の回答、ありがとうございます。 実際に書いてるプログラムは、 s/\\begin/<start>/; ・・・・・* のほかにもs/\\○×□/<△☆>/; というのが何行かありまして、 最後にs/\\/<k>/;をしてみました。 あるテキストファイルを読み込んで、このプログラムで変換しようとしているのですが、そのテキスト中には、\\がところどころにあって、上記のような変換のプログラムでやってみると、うまく<k>に変換されるのと、変換されずに\\のままのところが残ってしまいます。どうしたらうまくいくでしょうか。

関連するQ&A

  • PHPの置換方法

    <?php $begin = 'あいうえおかきくけこさしすせそ'; $replace = 'か*'; $last = ''; $word = str_replace($replace, $last, $begin); php> 以上のようにプログラムを組んで$wordの出力を『あいうえお』のように『か』以降をすべて空白で置換というプログラムを作りたかったんですがうまくいきませんでした。指定した文字列以降を全部置換するには*は使えないんでしょうか?また、ほかに方法があればアドバイスをいただけるとうれしいです。

    • ベストアンサー
    • PHP
  • # の置換はどうすればいいですか?

    #をAに置換する場合 s/#/A/; というふうに考えますが、コメントアウトされてしまいます。 /を置換するときは\/でエスケープできるのですが、#の場合どうすればよいのでしょう? また、////という文字列をAに置換する場合、 s/\/\/\/\//A/; というふうに書かなければならないのでしょうか? 何かうまい方法はありますか?

    • ベストアンサー
    • Perl
  • EXCELの置換について

    こんにちは、EXCELの置換についてお尋ねします。 一つのセルに「数字(0~の数字)s] もしくは、「s数字(0~の数字)」というように入力してあります。 9s, s12 s5 という感じです。 それを、数字だけに置換したいのですが、 出来たら、いっぺんに換えたいのですが、どなたか 教えてください。

  • テキスト処理 置換

    ファイル中の\begin{document}を<body>に変換したい のですが、errorになってしまいます。 s/\begin{document}/<body>/; はどこがだめなのでしょうか。 Perl勉強し始めなものです。 ご教授お願いします。

    • ベストアンサー
    • Perl
  • 偶置換、奇置換

    群について勉強していて、わからないことがあります。 nを自然数として、X_n={1,2,…,n}、 S_n={σ:X_n→X_n|σは全単射} とおく。 A_nを偶置換全体からなるS_nの部分群とする。ρ∊S_nは奇置換であるとし、 ρA_n={ρσ∊S_n|σ∊S_n} とおく。 この時、「φ(σ)=ρσ(σ∊A_n)で定まる写像φ:A_n→ρA_nが全単射である。」 とあるのですが、ここの部分がよくわかりません。 単射であることは以下のように証明してみました。 「σ、σ’∊A_nとして、ρσ=ρσ’ならば、両辺にρ^(-1)を左から作用させるとσ=σ’」 全射についてうまく証明することができません。 どのようにすればよいのか教えていただけると助かります。

  • 文字列の置換

    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
  • 英語の意味

    ゲットアップ=GETUP レッツビギン=LET'S BEGIN 僕は中卒で頭悪いですドラマでこのことばを言っていて携帯でしらべようとしたけど無理でしただれか意味わかるかたいましたら教えてください

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

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

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

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

  • 要素数が多い置換についてです

    こんにちは。perl超初心者です。 似たような質問が以前にもあったらすみません。 あるデータ内で、特定の文字列があった場合、その一部を置換して出力したいのですが、  0ab:P, 10ab:S, 20ab:D    ↓以下に置換したいです  0ab:D, 10ab:S, 20ab:D 以下のように、そのまま式に当てはめてもうまくいきません。   $str =~ s/0ab:P, 10ab:S, 20ab:D/0ab:D, 10ab:S, 20ab:D/g;   print OUT "$str\n"; 単純にPをDに置換するという訳ではなく、 上記の条件に完全一致する時のみ置換したいです。 初心者の為、変な記述をしてるかもしれませんが、 何卒ご教授お願い致します。

    • ベストアンサー
    • Perl