◀一般トップへ
  • 7239 正規表現で全角文字を検索したい
    • 7240 Re:正規表現で全角文字を検索したい
      • 7241 Re2:できました!ありがとうございました。
  • [7239] 正規表現で全角文字を検索したい 渡辺真 2010年09月21日 14:12

    テキストから、全角文字を抽出したいと思って、ネットで調べました。
    半角文字以外と言うことで、

    [^ -~。-゜]
    または、
    [^\x01-\x7E]

    という記述を見つけました。

    対象例文
    "item","A",,"渡辺12345",,"ML490","NIPPLE","95",
    "item","A",,"abcd12345",,"ML490","ワタナベ","95",

    ところが、SAKURAエディタでは、半角英字にも合致します。
    またUNICODE版では、改行にも合致します。

    他のエディタでは、全角文字を拾うようです。
    何かお分かりのことがあれば、教えて下さい。
    • [7240] Re:正規表現で全角文字を検索したい ds14050 2010年09月22日 23:51

      試してみました。読み込む正規表現ライブラリの設定を変更したあとは
      確実にそのライブラリによって検索が行われるように一度終了しています。

      ! sakura.exe(1.6.5.0) + Bregexp.dll V1.02 for SAKURA
      [^ -~。-゜] 渡辺ワタナベ(改行)にマッチ
      [^\x01-\x7E] 渡辺ワタナベにマッチ

      ! sakura.exe(1.6.5.0) + bregonig.dll Ver.1.46 with Oniguruma 5.9.2
      [^ -~。-゜] 渡辺ワタナベ(改行)にマッチ
      [^\x01-\x7E] 渡辺ワタナベにマッチ

      ! sakuraW.exe(Dec 27 2009) + bregonig.dll Ver.2.00 beta11 with Oniguruma 5.9.1
      [^ -~。-゜] 渡辺ワタナベ(改行)にマッチ
      [^\x01-\x7E] too short multibyte code string エラー。

      エディタやライブラリのバージョンによるのでしょうか。
      パターンについてわかることを書きますと、[^ -~。-゜] というのは ASCII
      (形を持った文字部分)と半角カナ以外ということで、ASCII制御文字(改行含む)と
      Shift_JISの先行バイトにマッチするようです。Shift_JISの一部の後続バイト
      (ASCIIの形を持った文字や半角カナと同じコード)にはマッチしないはずですが
      漢字の前半分にだけマッチするんでしょうか。[^\x01-\x7E] というのは ASCII
      以外ということで、改行にはマッチしませんし、半角カナにはマッチします。

      Unicodeでしたら East Asian Widthというプロパティが文字毎に定義されて
      いるようです。サクラエディタで検索に利用できるかは別として。

      半角文字に合致する正規表現
      <http://www.4d.com/jp/blog/regex-hankaku.html>

      • [7241] Re2:できました!ありがとうございました。 渡辺真 2010年09月23日 11:12

        ▼ ds14050さん
        > ! sakura.exe(1.6.5.0) + bregonig.dll Ver.1.46 with Oniguruma 5.9.2
        >
        > エディタやライブラリのバージョンによるのでしょうか。

        わざわざ確認いただいて、有難うございました。
        そのとうりでした。(^^ゞ

        私が使っていたものが、bregonig.dll Ver.1.42 だったので、半角英小文字にも当たっていましたが、Ver.1.46 にしたら、期待通りの結果になりました。


        > パターンについて、[^ -~。-゜]
        と
        > [^\x01-\x7E]
        の違いも教えていただいて、有難うございました。
        私のホームページにも、転載させていただきます。

        感謝いたします。
        m(__)m