下記のプログラムをベースにして置換を行いたいです。
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 =~ / ・・・・・
・・・・・
}
print OUT $str;
}
close (IN);
close(OUT);
sub wanted{
push(@filelist, $File::Find::dir."/$_") unless ($_ =~ /^\.$/);
}
Perlプログラムで下記の2つのソースを一括置換しようとしてます。
(1) paramIdとparamNameの文字列が同一の場合
<html:link styleClass="push" action="/numa.do" paramId="Id" paramName="Id" onclick="URL">ソース</html:link>
(2) paramIdとparamNameの文字列が同一でない場合
<html:link styleClass="push" action="/numa.do" paramId="Id" paramName="Name" onclick="URL">ソース</html:link>
やりたいことは
・ html:linkをs:aに変換
・ styleClassをcssClassに変換(これはわかるのですが位置の修正がわかりません。。)
・ action="/numa.do"を/numaに変換
・ paramIdとparamNameを文字列が同一か同一でないかで分岐処理したい。
目標は以下のように置換したいです。
(1) paramIdとparamNameの文字列が同一の場合
<s:a href="/numa?Id="%{ Id }" cssClass="push" onclick="URL">ソース</s:a>
(2) paramIdとparamNameの文字列が同一でない場合
<s:a href="numa" paramId="Id" paramName="Name" cssClass="push" onclick="URL">ソース</s:a>
どうしてもこの置換ができません、、誰かぜひ教えてください。
お願い致します。
No.1
- 回答日時:
まず, この手のことを本格的にやろうとしたら XML を扱うライブラリを使うことを考えるべきです. 例えば, 複数行にわたっていたりネストしていたりすると, 正規表現だけではなかなか難しいことをさせられる可能性があります.
逆に言えば, 「1行に収まっていて」「ネストはしていない」状況なら正規表現で処理することができます. ただし本題に入る前に以下の点を確認させてください:
・ほかの属性があったらどうしますか?
・「styleClassをcssClassに変換(これはわかるのですが位置の修正がわかりません。。)」とありますが, 「位置の修正」ってなんですか? そして, それはなぜしなければならないのですか (相手がよほどアホでない限り無意味な操作ですよ)? ついでに, 置き換えた結果を使う相手がよほどのアホであるという悲惨な状況を想定した場合, cssClass 属性はどこに入れる必要があるんですか?
・「action="/numa.do"を/numaに変換」とありますが, action 属性の値が "/numa.do" 以外のときは変換しないままでいいんですか?
・「paramIdとparamNameの文字列が同一の場合」のところに書いてある「%{ Id }」ってなんですか?
No.2
- 回答日時:
あ, 今気づいた.
「やりたいこと」の中に
・ action="/numa.do"を/numaに変換
ってあるんだけど, 「目標」の方にはこの属性が入ってない. そして, なぜか href なんて属性が増えてる. つまり「やりたいこと」が「目標」を正確には反映していない.
あと #1 に補足:
・最終的に属性はどのような順番で並べればいいんでしょうか (「ほかの属性がある」場合には特に問題になるんだけど, そうでない場合も含めて)?
・元のソースで styleClass 属性の値が push でなかった場合にはどうすればいい?
・paramId, paramName および onclick の各属性の値は変わりえる?
この回答への補足
・actionをhrefの属性に変更になります。
action="/numa.do"をhref="/numa"にしたいです。
ごめんなさい、属性の順番(位置)については考慮しなくてもよくなりましたので順番は特に問題ないです。
>・元のソースで styleClass 属性の値が push でなかった場合にはどうすればいい?
その場合、属性の値は元の値と先の値を同じにさせます。
・paramId, paramName および onclick の各属性の値は変わりえる?
はい、変わります。
No.3ベストアンサー
- 回答日時:
えぇと, 実は「属性の順番に意味がある」方が (ある意味) 簡単だったりします. というのは, そのような場合には元のソース自体で
・styleClass → paramId → paramName → action という順に属性が表れる
という仮定ができる可能性があるからです. もしそうなら難しくないですよね.
これが, 「元のソースからして属性の順番がぐちゃぐちゃ」ということになると, わりとまじめに属性を処理する必要があります. まあできるんだけど, そういうことだと s でちまちま置換するよりも「元のソースから目的の文字列を『構築』する」という方針を考えた方が早いような気がする. 例えば
$ref = "numa";
$paramId = "Id";
$paramName = "Name";
$class = "push";
$click = "URL";
$content = "ソース";
と変数に値があるときに
<s:a href="numa" paramId="Id" paramName="Name" cssClass="push" onclick="URL">ソース</s:a>
という文字列を作りたい (上の変数の値を href や paramId などの属性の値にする) としたら, どう作りますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 置換文字がみつからない時
-
住所編集のマクロを組んでいて...
-
GoogleAppsScript文字列置換の...
-
正規表現でURLを抽出したいと思...
-
【Excel VBA】文字列の置換作業...
-
C#で空白行を削除する方法
-
テキストファイル中の文字列の置換
-
置換した文字色の変更
-
C言語でテキストファイルの内容...
-
csvデータ ダブルクォーテ...
-
word オートシェイプ内も一括変換
-
特定の列のみ置換を行いたい
-
procmailで本文の文字列置換
-
秀丸で数字だけの行を削除したい
-
EXCEL警告「置換対象のデータが...
-
各項目がダブルクォーテーショ...
-
ハングルを日本語に置換
-
\\(円)記号を置換したい
-
サクラエディタ 数字だけを置...
-
正規表現で一括置換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
各項目がダブルクォーテーショ...
-
VBA 置換文字がみつからない時
-
正規表現で、特定の文字列を含...
-
スペースで区切られた氏名から...
-
csvデータのダブルクォーテーシ...
-
csvデータ ダブルクォーテ...
-
GoogleAppsScript文字列置換の...
-
C言語でテキストファイルの内容...
-
正規表現 特定の文字列を含む行...
-
テキストボックスの文字列を置...
-
EXCEL警告「置換対象のデータが...
-
TeraPadエディターの操作方法に...
-
xmlファイル内の文字列置換
-
python 大文字小文字を区別しな...
-
C#で空白行を削除する方法
-
テキストファイル中の文字列の置換
-
Excel VBA 教えてください。 VB...
-
ハングルを日本語に置換
-
EXCEL VBA でCTRL+Fのダイア...
-
PowerShellでテキストの空白行...
おすすめ情報