• ベストアンサー

全角・半角が混じったテキストで20文字毎に改行を入れたい

perl5.8.5でCGIのプログラムを作っています。 全角・半角が混じったテキストで20文字毎に改行を入れたいと思っています。 プログラムの文字コードはEUCで書いています。 (変換前)12345678901234567890123456789012345678901234567890    ↓ (変換後)12345678901234567890\n12345678901234567890\n1234567890 という感じです。 いろいろな方法で実現できると思ったのですが スマートな書き方を教えていただけますでしょうか。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • g_p_
  • ベストアンサー率53% (28/52)
回答No.3

文字クラスの指定がテキトーですが、どうですかね。 eucで書いてます。 参考になれば。 #! perl use strict; my $str = << '__END_OF_STR__'; perl5.8.5でCGIのプログラムを作っています。 全角・半角が混じったテキストで20文字毎に改行を入れたいと思っています。 プログラムの文字コードはEUCで書いています。 (変換前)12345678901234567890123456789012345678901234567890    ↓ (変換後)12345678901234567890\n12345678901234567890\n1234567890 という感じです。 いろいろな方法で実現できると思ったのですが スマートな書き方を教えていただけますでしょうか。 よろしくお願いいたします。 __END_OF_STR__ $str =~ s/\n//g; $str =~ s/((?:[\xA1-\xFE][\xA0-\xFF]|.){20})/$1\n/go; print $str; __結果__ perl5.8.5でCGIのプログラムを 作っています。全角・半角が混じったテキス トで20文字毎に改行を入れたいと思ってい ます。プログラムの文字コードはEUCで書 いています。(変換前)123456789 01234567890123456789 01234567890123456789 0   ↓(変換後)1234567890 1234567890\n12345678 901234567890\n123456 7890という感じです。いろいろな方法で 実現できると思ったのですがスマートな書き 方を教えていただけますでしょうか。よろし くお願いいたします。

chachachar
質問者

お礼

ありがとうございます。分かりやすいですね。

その他の回答 (2)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

EUCではなくUTF-8で書けばANo.1そのままのスマートな回答になることは知っています。 ---------------------------------------- use utf8; use Encode; $a = 'perl5.8.5でCGIのプログラムを作っています。全角・半角が混じったテキストで20文字毎に改行を入れたいと思っています。'; $a =~ s/(.{20})/\1\n/g; print encode('euc-jp', $a); ---------------------------------------- 実行結果はこちら(EUCです)。 ---------------------------------------- perl5.8.5でCGIのプログラムを 作っています。全角・半角が混じったテキス トで20文字毎に改行を入れたいと思ってい ます。 ----------------------------------------

chachachar
質問者

お礼

UTF-8で書くんですね。ありがとうございます。

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.1

$a="12345678901234567890123456789012345678901234567890"; $a=~s<(.{20})><\1\n>g;

chachachar
質問者

お礼

ありがとうございます

関連するQ&A

専門家に質問してみよう