-PR-
解決済み

文字列置換

  • 困ってます
  • 質問No.41181
  • 閲覧数94
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 29% (20/68)

和文・欧文混じりの文章の、アルファベット部分に*印をつけるプログラムを作成したいのですが

$line=~s/([A-Za-z])/\*$1\*/g;

とすると、
東京都千代田区SE

東京都千代田区*S**E*
としたいのに
東京・s*千代・c*区*S**E*
のように和文部分まで化けてしまいます。

漢字の文字コードが問題だろうということまでは解るのですが、
どうやって欧文だけ置換して良いのか解りません。
よろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2

 すいません(^_^;
 下記のじゃ動きません(^^;゜。

 どうしても正規表現だけでは駄目だったので、お詫びに確実に動くソースを作りました(笑) あんましスマートなソースじゃないですけど……。

sub editstring {
  local($result);
  for ( $i = 0; $i < length(@_[0]); $i++ ) {
    $c = substr(@_[0], $i, 1);
    if ( $c =~ /[\x81-\x9F\xE0-\xEF]/ ) {
      $result .= substr(@_[0], $i, 2);
      $i++;
    } elsif ( $c =~ /[A-Za-z]/ ) {
      $result .= "*".$c."*";
    } else {
      $result .= $c;
    }
  }
  return $result;
}

 第1引数の内容にご指定の加工を加えて返す関数です。(全角スペースをタブに置き換えれば動きます)
お礼コメント
ryogoku

お礼率 29% (20/68)

凄い!凄いです!
こんな事までしていただけるとは!!
質問して良かった!!
ありがとうございました!!
しかし何をやっているのか解らない自分の頭が憎い…。
勉強します。
本当にありがとうございました!!
投稿日時 - 2001-02-16 15:52:16
関連するQ&A
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1

 それは、漢字コードをちゃんと見分けてやる必要があります。 $line =~ s/([^\x81-\x9F\xE0-\xEF])([A-Za-z])/\*$2\*/g;  もしかしたらこれでうまくいくかもしれません。
 それは、漢字コードをちゃんと見分けてやる必要があります。

$line =~ s/([^\x81-\x9F\xE0-\xEF])([A-Za-z])/\*$2\*/g;

 もしかしたらこれでうまくいくかもしれません。


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ