• ベストアンサー

パターンマッチ変換について

& → & ; → &#x3b; の2つの実体参照エスケープを $value =~ s/&/&/g; $value =~ s/;/&#x3b;/g; で行うと、「&」の変換で出来上がった最後の「;」が次の「;」の変換の対象になって失敗してしまいます。 2つのパターンを同時に変換する方法をご存知でしたら、是非教えてください。 宜しくお願いします。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

#1 でちょっと間違えました. やりたいことはわかるかと思いますが.

noname#37358
質問者

お礼

修正が上手くいったようなのでお礼をさせてもらいます。 なるほど、ハッシュを使って場合分けすれば良いんですね。 勉強になりました。

noname#37358
質問者

補足

ご回答ありがとうございます。 既に気づいているとは思いますが、質問文にミスがあったので訂正します。 (修正も削除もできないようなので、回答されるまで、何もできないんですよね…。) & → & ; → &#x3b; のエスケープを $value =~ s/&/&/g; $value =~ s/;/&#x3b;/g; でやると失敗。 という事です。 (また、ミスってなければ良いのですが…。)

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • pick52
  • ベストアンサー率35% (166/466)
回答No.4

↓すみません、操作ミスと焦ってしまい変なことになって しまいました。 下の回答は無視してください。

全文を見る
すると、全ての回答が全文表示されます。
  • pick52
  • ベストアンサー率35% (166/466)
回答No.3

少し分かりませんが、よくある実体参照のエスケープは $value =~ s/&/&/g; ですね。

全文を見る
すると、全ての回答が全文表示されます。
  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

少し分かりませんが、よくある実体参照のエスケープは $value =~ s/&/&/g; ですね。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

%escape = ( '&' => '&&#x26', ';' => '&&#x3b' ); $value =~ s/([&;])/$escape{$1}/eg;

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字実体参照が勝手に変換されてしまう

    簡単な問合せフォームを作成中に文字実体参照に変換した文字が、元に戻されてしまい困っています。簡単なサンプルを作成してみましたが、以下の様な状態です。 1.入力フォームを持ったHTMLに 「<>と&lt;と&gt;」 と入力し、xxx.cgiに渡します。 2.xxx.cgi内で入力文字列を取得し、文字実体参照に変換後<hidden>で値を保持、再度xxx.cgiに<hidden>の文字列を渡すようにします。この時点で入力値は 「&lt;&gt;と&amp;lt;と&amp;gt;」 となります。 3.再度xxx.cgiが呼ばれると、文字実体参照に変換する処理が行われる為、入力値が 「&amp;lt;&amp;gt;と&amp;amp;lt;と&amp;amp;gt;」 となるはずですが、 「&lt;&gt;と&amp;lt;と&amp;gt;」 となってしまいます(変換処理が行われているはずなのに変換されていない)不思議に思って変換前のCGIの引数を確認してみると、 「<>と&lt;と&gt;」 と文字実体参照が元に戻されてしまっています。 ちなみに文字実体参照の変換処理は$valueに対象の文字が入っているとして以下の方法で変換しています。 ---------- $value =~ s/&/&amp;/g; $value =~ s/"/&quot;/g; $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; $value =~ s/\n/<BR>/g; ---------- こういった現象についてでも何か分かるようでしたら宜しくお願いします。

    • ベストアンサー
    • Perl
  • パターンマッチと除算

    perl初心者です。学生でperlを学びはじめたばかりです。 文の変換プログラムをperlで作りたいのですが、 各辺が5cmの四角形→50mm 正方形 30分間の走りこみ→0.5時間 マラソン という具合に言葉の置き換えと数字の変換を同時に行えるようなプログラムを作りたいです。 また、数字を拾うときに言葉によって式を変えたいです。 $pattern =~ s///g;と数値演算子/を使ってやるのは分かるんですが、それをどう組み合わせて使ったらよいのかわかりません。 簡単なことを質問して申し訳ありません。 どうかよろしくお願いします。

    • ベストアンサー
    • Perl
  • 「3つの数字パターンをひとつの記号に変換する」ことをエクセルで行いたい

    「3つの数字パターンをひとつの記号に変換する」ことをエクセルで行いたいです。 例)A1、A2、A3のセルにそれぞれ「-1」「0」「5」という数字があります。この数字の並びを参照して、次の条件でB3のセルに文字で置き換えたいのですが、どのようにすればよいでしょうか? 条件1/A1~A3までの数値のうちマイナスの数値が0~1個の場合,B 条件2/A1~A3までの数値のうちマイナスの数値が2~3個の場合,S 説明不足な点があるかもしれませんが、よろしくお願いいたします

  • ラプラス変換

    線形フィードバックシステムをラプラス変換を使って解く問題があり、入力がx(t)で出力がy(t)となっており関係が Y(s)={X(s)F(s)+N(s)}G(s)/{1+KF(s)G(s)} となるところまでできたのですが、ここからラプラス逆変換をしてy(t)を求めるところができません、どなたかできる方教えてください。また計算のコツなどがありましたら教えてください。 n(t)    +  ____ ↓+ ____ x(t)ー→|f(θ) |ー→|g(θ) |ーー→y(t) ↑-  ̄ ̄ ̄ ̄ +  ̄ ̄ ̄ ̄ |    |______________*k←____________| x(t)=asin(ωt),X(s)=aω/(s*s+ω*ω),n(t)=bsin(μt),N(s)=bμ/(s*s+μ*μ) f(θ)=e^(-αθ),F(s)=1/(s+α),g(θ)=e^(-βθ),G(s)=1/(s+β)

  • ラプラス変換の問題について

    ラプラス変換を用いて問題で次の問題が分かりません。 次の関係を同時に満たす関数x(t) y(t)を求めよ。  x' = 3s - y y' = x + y x(0) = 0, y(0) = 1 やったことのない型なのでどうすればいいのかわかりません。 お願いします。

  • 文字コード変換

    文字列をJISに変換するときに、Javaではロッキングシフトでエスケープシーケンス(0x1B 0x24 0x42)を使ってるみたいなんですが、SI/SO(0x0E/ 0x0F)にするには、どうしたらいいんでしょうか?

  • 良い考え方を知りたいです。(パターン照合について)

    良い考え方を知りたいです。  良い…処理が早い。  考え方…アルゴリズム(と言うのでしょうか) 与えられた部品のリストをマスターと照合し、完成させるタイプ(パターン)を判別したいと考えています。状況の例としては、 ○与えられる部品リスト   A,C,E,G,I,K,L,N,P… (アルファベットには8文字程度の文字列が入ります) ○マスター保持している例  パターン1:A,B,D,E,G,J,K…  パターン2:B,D,E,G,J,M…  パターン3:J,S,T,V,W,X,Z…  パターン4:A,B,D,Y,Z… パターン5:A,C,E,G,I,K,L,N,P…  (各タイプに保持されているマスタデータは順不同、且つ不特定数です) こんな感じで、データベース(MS AccessやSQLサーバー等)に保持されている各タイプと照合し、 与えられた部品リストがどのタイプ(パターン)に合致するか(一番近いか)を 判別するプログラムを作成したいのですが、 どんな考え方が適しているか、ご教示頂けないでしょうか? 照合するパターンはおよそ200弱、リストで渡される部品数は50前後です。 プログラミング自体は素人ですが、 ・適当なアルゴリズム ・サンプルソース(言語は何でも結構です) ・参考資料の探し方、検索場所 いずれかでご回答お願い申し上げます。

  • ラプラス変換(何度も何度もすみません・・・)

    先ほど質問した、(d^2 x)/(dt^2)+4x=sint,x(0)=0,x’(0)=0をラプラス変換せよという問題は、以下の方法で計算できることを教えてもらいました。 X(s)={1/(s^2+1^2)}{1/(s^2+2^2)}=a/(s^2+1^2)+b/(s^2+2^2) as^2+4a+bs^2+b=1 a+b=0 4a+b=1 a=1/3,b=-1/3 L^-1(X)=(1/3)L^-1{1/(s^2+1^2)}-(1/3)(1/2)L^-2{2/(s^2+2^2)} =(1/3)sin(t)-(1/6)sin(2t) で、次は、(d^2 x)/(dt^2)+4x=e^(3t),x(0)=0、x‘(0)=0という問題です。 この問題も上の問題みたいにs^+●みたいな形が出てくる問題です。 ラプラス変換すると、(s^2+4)X(s)=1/(s-3)でX(s)=1/{(s-3)(s^2+4)}になるのですが、これを上の方法でやるとa(s^2+2^2)+b(s-3)=1でas^2+a2^2+bs-3b=1になりsが消えません。上の問題はa+b=0でsが消えて連立方程式で求めれたのですが、今回はどうなのでしょうか。教えてください。

  • 逆ラプラス変換について

    L^(-1)[log((s+a)/(s+b))](x) という問題をとくのに授業でもらったプリントに F(s)=log((s+a)/(s+b))=log(s+a)-log(s+b) とおく s→∞でlimF(s)=0 でありF'(s)=1/(s+a)-1/(s+b) であるのでF(s)=-∫F'(t)dt (s~∞)=∫{1/(t+a)-1/(t+b)}dt (s~∞) である.ここでG(s)=1/(s+a)-1/(s+b) と置くと F(S)=∫G(t)dt(s~∞) でありg(x)=L^(-1)G(x)=e^(-bx)-e^(-ax) よってL^(-1)F(x)=L^(-1)[∫G(t)dt](x) (s~∞) =g(x)/x==e^(-bx)-e^(-ax)/xと書いてありましたが 途中のF(s)=-∫F'(t)dt (s~∞)がこうなるのがよくわかりません.公式ですか? ただL^(-1)(s/(s^2+4)^2)(x) を上記の通りに解いたら2(e^(x)-cosx)/xとなりました.これは合っているのでしょうか?

  • viでの置換

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