アプリ版:「スタンプのみでお礼する」機能のリリースについて

質問です。文字列の置換を行いたいのですが、まずはソースから・・・

use File::Basename;
use File::Copy;
use File::Find;
use File::Path;

my @filelist = ();


$inputfile='C:\Users\test.txt';
$outputfile='C:\Users\test_new.txt';

open (IN, $inputfile) or die "$!";
open (OUT, ">$outputfile") or die "$!";

while(<IN>) {
$str = $_;
if ($str =~ /html:text/) {
$str =~ s/html:text/s:textfield/g;
$str =~ s/property/name/;
$str =~ s/styleClass/cssClass/;
elsif($str =~ /html:textarea/) {
$str =~ s/html:textarea/s:textarea/g;
$str =~ s/property/name/;
$str =~ s/style/cssStyle/;
$str =~ s/styleClass/cssClass/;
}
print OUT $str;
}


close (IN);
close(OUT);


sub wanted{
push(@filelist, $File::Find::dir."/$_") unless ($_ =~ /^\.$/);
}

Perlプログラムで下記のソースを一括置換します。
<html:text property="xxx" styleClass="yyy">
<html:textarea property="abc" styleClass="def" style="ghi">

目標は以下のように置換したいです
<s:textfield name="xxx" cssClass="yyy">
<s:textarea name="abc" cssClass="def" cssStyle="ghi">

しかし、上記のプログラムを実行すると
<s:textfield name="xxx" cssClass="yyy">
<s:textfieldarea name="abc" cssClass="def" style="ghi">

となってしまいます。
どこをどう直せばよいのかわからないので誰か教えてください。
お願い致します!!

A 回答 (1件)

単純な解決方法


置換の順番を変える。
/html:text/ は"html:text"にも"html:textarea"にもマッチするので、先に/html:textarea/を処理する。
/html:text / と半角スペースを含めてマッチさせる。
 Perlを含めて最長マッチをしますからね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/11/11 19:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!