カレッヂ |
質問者 まき
投稿日 7/22(月) 21:05:47
掲示板などで書き込まれたコメントを 強制的に一定文字数で(例えば5文字で)改行して表示したいのです。 例)$wordに「あいうえおかきくけこさしすせそ」があるとします。 これを、5文字毎に改行したいのです。 $word:「あいうえおかきくけこさしすせそ」 ↓ $newword:「あいうえお<br>かきくけこ<br>さしすせそ<br>」 for($i=0; $i<length($word); $i+=10) { $newword .= substr($word,$i,10); $newword .= "<br>"; } こうすると、コメント文が全て全角だと大丈夫なのですが、 半角文字が入ってしまうと、うまく表示できません。 正規表現を使って作るのでしょうか?? 解る方がおりましたらぜひ教えてください。 よろしくお願いいたします
プロバイダ参照:http://www.marimo.or.jp |
回答者 moto
[削除]
投稿日 7/22(月) 22:55:44
文字コードがSHIFT-JISの場合であれば、以下のような感じで処理できます。 $n = 5; $word =~ s/(.)/$1\0/g; $word =~ s/([\x81-\x9f\xe0-\xfc])\0(.)\0/$1$2/g; $word =~ s/((..){1,$n})/$1<br>/g; $word =~ tr/\0//d; |
回答者 みけ
[削除]
投稿日 7/23(火) 11:11:35
ちなみにEUCならこれでできます。 $n = 5; $ascii = '[\x00-\x7F]'; $twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]'; $threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]'; $euc_num = "(?:$ascii|$twoBytes|$threeBytes){$n}"; $word =~ s/($euc_num)/$1<br>/g; Perl5以上でないと動きませんが。 |
質問者 まき
[削除]
投稿日 7/23(火) 12:03:35
motoさん、みけさん お返事ありがとうございました。 無事にプログラムは動作しました。 {}量指定子を使うんですね。 正規表現って難しいですね。 まだまだ勉強が必要です。 本当にありがとうございました。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |