WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:置き換え演算子について

0:[投稿] windows [2003/12/23 00:34 ][環境:IE6 UNIX,Apache]

詳しい方居りましたら教えてください。

@$value =~ s/(<br>){3,}/$1{2}/g;
のようにフォーム値からの$value内に<br>が連続で3個以上ある場合に
<br>を2個にしようと組んだのですが、うまく行きません。
A$value =~ s/(<br>){3,}/<br><br>/g;
だとうまく行きます。
@ではダメなんでしょうか?


1:[回答] nero [2003/12/23 00:47 ]

置換後文字列に量指定子は使えないと思いますので、正規表現の書き方を工夫するしかなさそうです。windows さんが書かれた (2) の例でもいいでしょうし、次のように書いてもいいでしょう。

$value =~s/(<br>{2})(<br>)+/$1/g;


2:[完了] windows [2003/12/23 01:18 ]

neroさん、早速のレスありがとうございます!!
置き換え後の文字列に量指定子は使えないんですね。
勉強になりました。
重ねて、御礼申し上げます!ありがとうございました。


3:[質問] windows [URL] [2003/12/24 22:44 ]

neroさん、並びにCGIにお詳しい方、再度宜しくお願い致します。neroさんの方式で置き換え演算子を書き換えました。
3個以上の改行を2個で表示できたのでうまくいった!!と思ったのですが、連続で違うフォーム値を投げると、2個以下の改行のものまで2個の改行処理をしてしまいます。ソースの書き方が悪いと思い、自分なりに改めたのですが全くわかりません。

該当のソースを写したテキストを自サイトにあげたので、宜しければチェックしていただきたく思います。

宜しくお願い致します。


4:[回答] J [2003/12/25 09:55 ]

><問題の部分>
>$com =~ s/(<br>){3,}/$1x2/eg;
><問題の部分>
はOKなんじゃないでしょうか。
sjisなようなので
$value =~ s/\n/<br>/g;
$value =~ s/\r/<br>/g;
により必ず<br>が2個になってるということはないですか?


5:[回答] nero [URL] [2003/12/25 10:18 ]

J さんのおっしゃるとおりだと思います。

改行コードを改行タグに変換する部分は、次のように書くと良いそうです。

s/\x0D\x0A/<BR>/g;
s/\x0D/<BR>/g;
s/\x0A/<BR>/g;


◆ Perlメモ 改行コードを <BR> に変換する
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_2BR


6:[完了] windows [2003/12/25 14:01 ]

Jさん、neroさん、レス誠にありがとうございます!

windowsの改行コードを考えたら、Jさんの言う通り常に<br>が3個以上になるソースだと言う事がわかりました。

---------------------------------
$value =~ s/\r\n/<br>/g;
$value =~ s/\n/<br>/g;
$value =~ s/\r/<br>/g;
       :
       :
       :
$com =~ s/(<br>){3,}/$1x2/eg;
---------------------------------
このように改良し、現在動作しております。


7:[完了] AC [2003/12/25 20:36 ]

>>6
>$value =〜 s/\r\n/<br>/g;
>$value =〜 s/\n/<br>/g;
>$value =〜 s/\r/<br>/g;
neroさんが正しく書いているのに、なぜわざわざ間違った書き方に書き直すのでしょうか。
http://www.din.or.jp/〜ohzaki/perl.htm#CRLF_Unify


8:[完了] AC [2003/12/25 20:39 ]

>>7
Safariがoverlineを〜に変換したようなので、修正。
http://www.din.or.jp/%7Eohzaki/perl.htm#CRLF_Unify


9:[完了] windows [2003/12/25 22:54 ]

ACさん、neroさん、ご教授本当にありがとうございます。

間違った事を覚えないように最初から、正しい手法でやっていった方がやはりいいですよね。すみませんでした。

neroさんの回答通り
s/\x0D\x0A/<BR>/g;
s/\x0D/<BR>/g;
s/\x0A/<BR>/g;
とソースを書直し、現在運用させています。

ありがとうございました!!

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World