• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perlの文字列置換について)

Perlの文字列置換でStruts1からStruts2のJSPのタグを変換する方法とは?

このQ&Aのポイント
  • PerlでStruts1からStruts2のJSPのタグを変換する際に、文字列置換を使用する方法について教えてください。
  • 参考書を元に作成したPerlの文字列置換コードは一部の属性の順番が逆だったり、他の属性を間に入れることができないという問題が発生しています。
  • どなたか、この問題を解決する方法を教えていただけませんか?

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

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.2

簡単ながら s/(?<=html:textarea\b[^>]*)\bproperty\s*=/name=/g; s/(?<=html:textarea\b[^>]*)\bstyleClass\s*=/cssClass=/g; s/<html:textarea\b/<s:textarea/g;

その他の回答 (2)

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

いまさらだけど,「変換できない」具体例を出した方がいいんじゃないかな. あと, 「正確なプログラム」も.

numatahitomi
質問者

お礼

ご指摘ありがとうございます。

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

> 属性のpropertyとstyleClassの順番が逆だったり これは、もともと逆なのではないでしょうか? 順番を入れ替えるような操作は、この中にはありません。 > ここに記載していない他の属性を間に入れたりすると変換ができません これも、本来関係無いはずです。文字列のどこにあっても変換されます。 1行ずつ処理していて、複数行になっている、ということは無いですか? 例えば html:textarea property="aaa" styleClass="bbb" という2行になっていたら html:textarea property="aaa"→「 ($str =~ /html:textarea/ ) 」が真なので変換 styleClass="bbb"→「 ($str =~ /html:textarea/ ) 」が偽なので変換対象外 となります。 逆に、複数のタグが1行に入っていて、先頭の一つだけが変換されている、ということは無いですか? gオプション無しでは、1つしか置換されません。 > $str =~ s/property=\"(.+)\"/name="$1"/; +は、マッチする中で一番長い文字列を採用します。 .は任意の文字で、" も対象です。 よって html:textarea property="aaa" styleClass="bbb" では、 $1 = aaa" styleClass="bbb となります。 今回はそのまま元に戻す感じで使われているので問題無さそうですが、1行に複数のproperty=があると、2個目以降のpropertyは$1の中に入ってしまって、変換対象とはなりません。

関連するQ&A