• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:日本語での正規表現について)

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

このQ&Aのポイント
  • 正規表現を使用して「***************** Version 2 *****************」という文字列から「2」を取得したいが、日本語文字列ではうまく動作しない。どのようにエンコードすれば良いか教えてください。
  • 「***************** バージョン 2 *****************」という文字列から「2」を取得するために正規表現を使用したが、日本語文字列に対して正しく動作しない。バージョン以外の日本語文字列も同様にマッチさせるための変換方法を教えてください。
  • 与えられた文字列に含まれる「バージョン」という文字の文字コードはSJISです。WebやWindows上のアプリケーションで指定文字列を変換する方法を教えてください。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

一応、検索に有効なキーワードを入れてあったんだけど > Unmatched [ in regex; marked by <-- HERE in m/^\*+\s*バー 「ダメ文字」で検索。例えば http://sites.google.com/site/fudist/Home/grep/sjis-damemoji-jp ーに[が含まれているため、ここで[が始まっているのに対応する]が無い、というエラー。 []で括ってあったときは、[の中に[を書くと、「[という文字」の意味になるので、エラーにならなかった。 ー[] とすると、 「ー」の1バイト目+ [[] となって、「ー」の1バイト目+「[という文字」 となって、ーにマッチする。 あるいは、\Q \Eでメタ文字を無効にする。 > そのややこしい部分をどのように記述すればよいのかを質問したつもりでした。 「perl unicode」で検索。例えば、以下のところとか。 http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html http://www.rwds.net/kuroita/program/Perl_unicode.html

tetuya120
質問者

お礼

回答ありがとうございます。 下記のように\Qと\Eで該当文字を囲む事で正しい結果が得られました。 /^\*+\s*\Qバージョン\E\s+(\d+)\s*\*+\s*$/

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> /^\*+\s*[バージョン]\s+(\d+)\s*\*+\s*$/ なんで [バージョン] と [] がついてるのでしょうか? 最初のを[Version]としたらどんなことになるか、おわかりでしょうか? > perlはほぼ使えないため、WebやWindows上でのアプリケーションで指定文字列を渡すと変換できる物をお願い致します。 > (perlは入っているためコマンドを叩けばOKというのであればそれでも構いません) すみません。おっしゃってることの意味がわかりません。 なにからなにに変換するのでしょうか? > 与えられる「バージョン」という文字の文字コードはSJISになります 入力もPerlのスクリプトもShift_JISで書かれているのなら、以下の点に注意すればそのまま記述するだけです。 ・日本語一文字は2バイトの文字の並びだと解釈される。 固定の文字列ならあまり問題無い。 *,+等の量指定子、[]等の文字セットでは、注意が必要。量指定子は後半の1バイトだけの繰り返し、[]では前半の1バイトか後半の1バイトのどちらかにマッチする、という意味になる。 ・いわゆる「ダメ文字」がある。よく言われる\以外にも、リストを表す@、正規表現で使われるメタ文字も対象になるので、かなりの文字が該当する。 日本語も一文字として扱いたいのなら、Unicode文字列として変換して...となります。 どうするかはややこしいので検索でもして調べてください。

tetuya120
質問者

お礼

お答えありがとう御座います。 No.1の方のお礼に書かせていただきましたが、「[」、「]」は不要でした。 >なにからなにに変換するのでしょうか? perl内ではsjisは使用できないかと思い、何らかの文字コードに変換するのかと思い書かせていただきました。 >どうするかはややこしいので検索でもして調べてください。 そのややこしい部分をどのように記述すればよいのかを質問したつもりでした。 >固定の文字列ならあまり問題無い。 とのお答えもありましたが、No.1の方のお礼に書いたとおりどうにもうまくいきません。 意図がわかりずらい文章で申し訳ありませんが、よろしくお願い致します。

すると、全ての回答が全文表示されます。
回答No.1

フリーのサクラエディタ(http://sakura-editor.sourceforge.net/)の 検索・置換の正規表現では 「^\*+\s*[バージョン]\s+(\d+)\s*\*+\s*$」でなく 「^\*+\s*バージョン\s+(\d+)\s*\*+\s*$」であればOKです。 (サクラの検索・置換では”/”は不要) 日本語の周りの”[”、”]”は不要では?

tetuya120
質問者

お礼

お答えありがとう御座います。 確かに「[」、「]」は不要でした。 「/^\*+\s*バージョン\s+(\d+)\s*\*+\s*$/」として実行した所↓のエラーがでました。 「Unmatched [ in regex; marked by <-- HERE in m/^\*+\s*バー <-- HERE ジョン\s+(\d+)\s*\*+\s*$/ at 」atの後は略させていただきました。 こちらで調べた所「ー」は「\ー」としろという情報がありましたのでこちらも試しましたが、うまくいかない状態です。

すると、全ての回答が全文表示されます。

関連するQ&A