• ベストアンサー

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

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

  • Perl
  • 回答数6
  • ありがとう数2

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

  • ベストアンサー
  • 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

関連するQ&A

  • 正規表現による日本語の置換

    例えば、次の文を実行したとします。 文字列.replace(/ alt=".+?"/ig," alt=\"\""); すると、半角文字のみのalt属性は全て削除されますが、全角文字を含むalt属性は削除されません。 「.」がマルチバイト文字に対応していないためと思われますが、詳しくはわかりません。 原因&解決策を教えてください。

  • 日本語での正規表現について

    「***************** Version 2 *****************」 ↑という文字列を評価して「2」を取りたい為に「/^\*+\s*Version\s+(\d+)\s*\*+\s*$/」という正規表現を使用しています。 「***************** バージョン 2 *****************」 同様に↑という文字列を評価して「2」を取りたいので「/^\*+\s*[バージョン]\s+(\d+)\s*\*+\s*$/」としましたがうまく動きません。 日本語文字列が正しく動作していないようです。 何らかの形でエンコードして当てはめればよいと思うのですが、どのような値を設定すればよいでしょうか? 「バージョン」以外にも「ユーザ」、「日付」などの日本語を同様にマッチさせる必要があるため、変換方法を教えて頂けると助かります。 perlはほぼ使えないため、WebやWindows上でのアプリケーションで指定文字列を渡すと変換できる物をお願い致します。 (perlは入っているためコマンドを叩けばOKというのであればそれでも構いません) 与えられる「バージョン」という文字の文字コードはSJISになります。

    • ベストアンサー
    • Perl
  • 正規表現

    正規表現で次の文字列を認識する方法を教えてください 1. (000) (999) ()でくくられている3桁の数字。カッコを含みます 3桁の数字文字列だけなら'[0-9][0-9][0-9]' ?? 2. [あああ] (あああ) いあああ+ rあああ> 文字列'あああ'の前後の任意の文字、半角、全角両方OKを含む5文字 文字列がカッコの場合もあり

  • 正規表現:囲われた文字列の置換

    シングルクオーテーションで囲われた文字列のシングルクオーテーションの前に文字を追加するように、正規表現を用いて置換しようと考えています。 全角文字は[^\x01-\x7E]で検索できるのはわかったのですが、シングルクオーテーションで囲われて、全角文字を含む場合という表現ができません。 下記のような、文字列を対象としています。置換をするのは、全角文字を含む文字列のみです。  全角文字のみ  半角文字のみ  全角半角文字両方 下記ののように置換したいです。 置換前: '全角文字や半角文字','testです','test'.'テスト'.'てすとtest','123' 置換後: A'全角文字や半角文字',A'testです','test'.A'テスト'.A'てすとtest','123' よろしくお願いします。

  • 正規表現置換

    はじめまして。 現在、テキストエディタで kami987koroです。(漢字、かな、英数字、半角記号、全角記号、改行、スペースを含む文字列)ありがとうございました。 という文字列を正規表現で拾いだして、置換したいと考えています。 ただ、私がその方面の知識に疎く、どう表記すればよいのか分かりません。 そこで、この分野にお詳しい方、ご教授願えませんでしょうか? よろしくお願い致します。

  • 正規表現の置換(EmEditor)

    Fireworksで書きだしたhtmlをEmEditorで修正中です。 name="●●●" を一括削除しようと正規表現を使った置換を試みていますが上手く出来ません。 検索する文字列に入れるサンプル文字を教えて頂けませんか。 ■検索したい文字列例(行頭に半角スペースあり) (半角スペース)name="c123_r4_c6" (半角スペース)name="c123_r5_c5" (半角スペース)name="c123_r6_c4" などです。 全てに共通するものは name=""、c123、_r、_c です。 4、5、6 の位置にある数字は変わります。 ■置換後の文字列 空白 (検索したい文字列の行頭半角スペースも削除) よろしくお願いします。

  • マイフェスでの「正規表現」置換について

    下記のような文で和文中の数字(年月日以外もあり)のみ全角に変換したいのですが、 (欧文の中の数字は半角のままで) 「旧文字列」と「新文字列」の正規表現の記述はどうすればよいでしょうか。 「November 28,1932,895.63 OR 4/22,Internal 1932年12月15日付」

  • 正規表現

    質問させていただきます。 文字コード「Shift-JIS」で渡ってきた文字列を 英字とスペースはOKで、 それ以外の文字列が入力されていたら、エラーいう処理を しているのですが、うまくいきません。 ご教授よろしくお願いします。 // 半角にする $kana = mb_convert_kana($_POST['kana'], "r"); if ((ereg("^[a-zA-Z]+$", trim($kana))) == false) {   echo "エラーです"; } 全角スペースと半角スペースと英字はOKで、それ以外はNG としたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ある特定の文字列だけ消去不能にブロックすることはできますか?

    エディタでもワードでもいいのですが、 ある特定の文字列(半角又は全角)、 例えば、xxx、xxx、yyy等だけを 上書き禁止、消去不能にして、 他の文字は自由に上書きしたいのですが、 このようなことは可能でしょうか? ご教示くださいませ。 よろしくお願いします。

  • EmEditorでの置換方法

    EmEditorでの置換方法 EmEditor(フリー)で、カッコ内の文字列を削除したいのですが、方法がわかりません。 カッコは全角で、カッコも含めて削除したいのです。 文章の中にあり、カッコの中の文字列は1文字の場合もあれば4文字など不特定多数です。 そのような場合の検索方法はありますでしょうか? ヘルプを見たり、調べたりしましたが分かりませんでした。 よろしくお願いします。

専門家に質問してみよう