• ベストアンサー

日本語を含む正規表現の置換

日本語を含む文字列が$word1、$word2 があります。 $word1から"(xxx)"というような半角カッコに囲まれた文字を削除したいです。 $word2からは"(xxx)"というような全角カッコに囲まれた文字を削除したいです。 カッコの中の文字xxx(日本語)は不特定です。 $word1は以下のコードで上手くいきました。 $word1=~ s/\(.*?\)//; しかし$word2が上手くいきません。 基本的なことかもしれませんが、 色々やってみても上手くいかないので、 よろしくお願いします。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.6

さしあたり手元の Linux + perl 5.8.8 で次のコードは動いてます. スクリプトそのものは shift-jis ですが, 表示するコンソールは euc じゃないといけないので use encoding が変ですが. #!/usr/local/bin/perl use encoding 'shift-jis', STDOUT => 'euc-jp'; $data = '(abacaa)'; if ($data =~ /((.*))/) { print "$1\n"; } else { print "unmatched.\n"; }

Masa333
質問者

お礼

上手くできました! ありがとうございます。 本当に助かりましたm(__)m

その他の回答 (5)

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.5

> 試しに全角カッコの1文字"("だと上手く認識できました。 とありますが、")"だとうまくいかないのですか? とすると、文字列中に出てくる閉じ括弧が全角でないのでは?

Masa333
質問者

補足

言葉足らずですみません。 全角カッコ1文字は "(" 、 ")" とも上手くいきました。 全角カッコの1文字1文字は認識できるのですが、 カッコとそのカッコにはさまれた文字をとりだそうとした 正規表現が上手くいきません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#1>回答いただいたものは、実は既に試していて、置換ができませんでした。 うまくいかなかったデータについて、どんなものがうまくいかなかったのか教えてください

Masa333
質問者

補足

まず初めに試したのが、1で回答いただいたものです。 $word2 =~ s/(.*?)//; 全角のカッコが認識できていないのかと思い、 全角カッコだけで試してみました。 $word2=~ s/(//; 全角カッコ1文字だと正しく認識できました。 他にもネットで調べて、いくつか適当に試してみたのですが、上手くいきませんでした。 試したソースは憶えていませんm(__)m

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.3

・スクリプトの文字コード、$word1と$word2の文字列の文字コードは本当にShift-JISですか? スクリプトの文字コードが違う、という可能性があるかもしれません。 $word1と$word2がShift-JISで確定なら、生のバイト値で指定するのも一つの手でしょう。 $word2 =~ s/\x81\x69.*?\x81\x6A//g;

Masa333
質問者

お礼

回答ありがとうございます。 直前にjcodeで変換しているので、文字コードはShift-JISで間違いないと思います。 ただ、回答いただいたバイト値で指定する方法をやってみましたが、うまくいきませんでした。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

・どのようなコードで ・どのようなデータに対して ・どのようにうまくいかないのか を書いてください.

Masa333
質問者

補足

説明不足ですみません。 データはDBから抽出するので、不特定です。 データの中にカッコ書きが含まれているものがあるので、カッコ書きの部分を削除したいです。 カッコが半角の場合は上手く削除できたのですが、 カッコが全角の場合は、削除できませんでした。 試しに全角カッコの1文字"("だと上手く認識できました。 $word2=~ s/(//; やりたいのは全角カッコとその間にある文字を削除したいのですが、その方法がわかりません。 よろしくお願いします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

$word2 =~ s/(.*?)//;

Masa333
質問者

補足

回答ありがとうございます。 回答いただいたものは、実は既に試していて、 置換ができませんでした。 書き忘れていたのですが、文字コードはShift_JISです。 既に存在するプログラムに組み込むので、文字コードの変更なしでやりたいのですが、 Shift_JISだから上手くできないのでしょうか? よろしくお願いしますm(__)m