![]() |
| カレッヂ |
質問者 まき
投稿日 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裏技 |