お世話になっております。
@usable_A = qw(太 斜 …);
@usable_B = ('SPAN class=B','SPAN class=I' …);
と設定して、フォームからの入力データ
●<太><斜>かにみそ</斜></太>
を
●<SPAN class=B><SPAN class=I>かにみそ</SPAN></SPAN>
と変換してログに入れるようにしました。
このデータを編集する際、フォーム内での表示を
●<太><斜>かにみそ</斜></太>
に戻したいのですが、</SPAN>を</斜></太>にするにはどのようにすれば良いのでしょうか。
宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
閉じタグが</SPAN>であると決め打ちしてしまいます。
my @usable_A = qw(太 斜);
my @usable_B = ('SPAN class=B','SPAN class=I');
my $str = '<SPAN class=B><SPAN class=I>かにみそ</SPAN></SPAN>';
my %B2Atable = map { $usable_B[$_] => $usable_A[$_] } 0..$#usable_B;
{
local $" = '|';
1 while $str =~ s#<(@usable_B)>((?:(?!<(?:@usable_B)>).)+?)</SPAN>#<$B2Atable{$1}>$2</$B2Atable{$1}>#;
}
print $str;
#<太><斜>かにみそ</斜></太>
他に無関係なSPANが存在する時はHTML全体をパースすることになりそうです。
No.5
- 回答日時:
# HTML の構造によっては希望通りに動きませんが・・
# そしてハッシュは#4さんのぱくりですが・・・
use strict;
my @usable_A = qw(太 斜 下);
my @usable_B = ('SPAN class=B','SPAN class=I', 'SPAN class=U');
my $usable_B2=join "|", @usable_B;
my %B2Atable = map { $usable_B[$_] => $usable_A[$_] } 0..$#usable_B;
my $html;
{
local $/;
$html=<DATA>;
}
while ($html=~/<($usable_B2)>(.+)<\/SPAN>/){
my $sub ="<$B2Atable{$1}>$2<\/$B2Atable{$1}>";
$html=~s/$&/$sub/;
}
print $html;
__DATA__
<HTML>
<HEAD>
</HEAD>
<BODY>
ここから
<SPAN class=B><SPAN class=I>かにみそ</SPAN></SPAN> Ushiro
区切り
<A HREF=...>LINK</A>
Mae <SPAN class=U><SPAN class=I><SPAN class=B>うに</SPAN></SPAN></SPAN>
</BODY>
</HTML>
御回答有難う御座います。
どうもエラーが出てしまうようです。
読解力が甚だ不足しているので、どこをどう弄れば良いのかも判らないのですが。
HTMLの構造が違うということ…ですか…ね??
話は逸れますがclass名やら読まれていて笑いました。
No.3
- 回答日時:
$stringに変換対象の文字列が入っているとします。
while($string =~ m/<SPAN class=(?:B|I)>[^<>]+?<\/SPAN>/){
$string =~ s/<SPAN class=I>([^<>]+?)<\/SPAN>/(斜)$1(\/斜)/i;
$string =~ s/<SPAN class=B>([^<>]+?)<\/SPAN>/(太)$1(\/太)/i;
}
$string =~ s/\(/</g;
$string =~ s/\)/>/g;
まず、最短マッチで、内側のspanを置換します。但し、いきなり<斜>や<太>にしてしまうと次のマッチがヒットしなくなってしまうので、とりあえず(斜)と(太)に置換して、最後に<>に戻しました。
御回答有難う御座います。
問題無く動作致しました。
ただ、使えるタグ、というか修飾の種類を増やす場合は書き加えなければいけないのですよね?
ちょっと手間かも…我が儘で済みません。
No.2
- 回答日時:
質問の答えにはなっていませんが。
変換せずにログに保存。
表示する時にはその都度変換。
編集フォームにはログにある元データをそのまま表示。
効率は悪いのですが、データはなるべくオリジナルのまま保存しておいた方が何かと都合がよいような気がします。(理由は?と聞かれても経験上としか答えられませんが)
表示の際に都度変換というのも考えてはみたのですが、ログ数が多かったり変換数が多かったりしたら遅くなりそうな気が致しまして。それなら投稿・編集の際に一記事だけを変換するのが良いかと。
…そんなことはないのでしょうか…。
ともあれ、御回答有難う御座いました。
No.1
- 回答日時:
置換で徐々に変換するとか。
はじめからxslとかを使ってしまうとか?
戻すより変換前のデータを使った方が良いと思いますが。
</span></span>
↓
</斜></span>
↓
</斜></太>
ログに出すときにきちんと改行していれば
そこまで一気に正規表現で引っ掛ける事も出来るのですが。
御回答有難う御座います。
徐々に変換する、その条件というか判定の仕方?がわからないもので…。
修飾を施して記事投稿するもので、</SPAN>の順番とか数とかは任意なのです。「class=~」部分がマッチしたら閉じタグも決定されることになるとは思うのですが…?(思考がここで止まります)
他の情報と一緒に<>で区切られておりますが、改行はしてあります。
何か良い案がありましたら、また宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 分数が正常に表示されない。 6 2022/05/09 18:53
- JavaScript htmlとcssで分数を表示後、分数の右側に文書を書きたい 1 2022/04/28 10:09
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS CSSのホバーエフェクト 1 2023/06/19 06:53
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GoogleAppsScript文字列置換の...
-
正規表現でURLを抽出したいと思...
-
csvデータのダブルクォーテーシ...
-
正規表現で、特定の文字列を含...
-
HTMLタグ内の文字の置き換え
-
対称群はなぜそう呼ばれるので...
-
VBA 置換文字がみつからない時
-
正規表現でタグとその内容を検...
-
VBscriptで「改行」と「"」を置...
-
スペースで区切られた氏名から...
-
秀丸での正規表現(文字の抜き...
-
PowerShellでテキストの空白行...
-
SQL IIF と REPLACE のやりかた
-
Excel VBA 教えてください。 VB...
-
TeraPadエディターの操作方法に...
-
CSVファイルの中で、「 , 」カ...
-
pythonエラー
-
VBA 文字に半角が含まれて...
-
LINUX上でシリアル通信(C++)
-
英数字のみ全角から半角に変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
各項目がダブルクォーテーショ...
-
VBA 置換文字がみつからない時
-
正規表現で、特定の文字列を含...
-
スペースで区切られた氏名から...
-
csvデータのダブルクォーテーシ...
-
csvデータ ダブルクォーテ...
-
GoogleAppsScript文字列置換の...
-
C言語でテキストファイルの内容...
-
正規表現 特定の文字列を含む行...
-
テキストボックスの文字列を置...
-
EXCEL警告「置換対象のデータが...
-
TeraPadエディターの操作方法に...
-
python 大文字小文字を区別しな...
-
xmlファイル内の文字列置換
-
C#で空白行を削除する方法
-
Excel VBA 教えてください。 VB...
-
テキストファイル中の文字列の置換
-
ハングルを日本語に置換
-
EXCEL VBA でCTRL+Fのダイア...
-
PowerShellでテキストの空白行...
おすすめ情報