電子書籍の厳選無料作品が豊富!

「***************** Version 2 *****************」
↑という文字列を評価して「2」を取りたい為に「/^\*+\s*Version\s+(\d+)\s*\*+\s*$/」という正規表現を使用しています。

「***************** バージョン 2 *****************」
同様に↑という文字列を評価して「2」を取りたいので「/^\*+\s*[バージョン]\s+(\d+)\s*\*+\s*$/」としましたがうまく動きません。
日本語文字列が正しく動作していないようです。

何らかの形でエンコードして当てはめればよいと思うのですが、どのような値を設定すればよいでしょうか?

「バージョン」以外にも「ユーザ」、「日付」などの日本語を同様にマッチさせる必要があるため、変換方法を教えて頂けると助かります。
perlはほぼ使えないため、WebやWindows上でのアプリケーションで指定文字列を渡すと変換できる物をお願い致します。
(perlは入っているためコマンドを叩けばOKというのであればそれでも構いません)

与えられる「バージョン」という文字の文字コードはSJISになります。

A 回答 (3件)

一応、検索に有効なキーワードを入れてあったんだけど



> Unmatched [ in regex; marked by <-- HERE in m/^\*+\s*バー

「ダメ文字」で検索。例えば
http://sites.google.com/site/fudist/Home/grep/sj …

ーに[が含まれているため、ここで[が始まっているのに対応する]が無い、というエラー。
[]で括ってあったときは、[の中に[を書くと、「[という文字」の意味になるので、エラーにならなかった。
ー[] とすると、 「ー」の1バイト目+ [[] となって、「ー」の1バイト目+「[という文字」 となって、ーにマッチする。
あるいは、\Q \Eでメタ文字を無効にする。



> そのややこしい部分をどのように記述すればよいのかを質問したつもりでした。

「perl unicode」で検索。例えば、以下のところとか。

http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl …
http://www.rwds.net/kuroita/program/Perl_unicode …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
下記のように\Qと\Eで該当文字を囲む事で正しい結果が得られました。

/^\*+\s*\Qバージョン\E\s+(\d+)\s*\*+\s*$/

お礼日時:2011/06/06 15:49

> /^\*+\s*[バージョン]\s+(\d+)\s*\*+\s*$/



なんで [バージョン] と [] がついてるのでしょうか?
最初のを[Version]としたらどんなことになるか、おわかりでしょうか?

> perlはほぼ使えないため、WebやWindows上でのアプリケーションで指定文字列を渡すと変換できる物をお願い致します。

> (perlは入っているためコマンドを叩けばOKというのであればそれでも構いません)

すみません。おっしゃってることの意味がわかりません。
なにからなにに変換するのでしょうか?

> 与えられる「バージョン」という文字の文字コードはSJISになります

入力もPerlのスクリプトもShift_JISで書かれているのなら、以下の点に注意すればそのまま記述するだけです。
・日本語一文字は2バイトの文字の並びだと解釈される。
固定の文字列ならあまり問題無い。
*,+等の量指定子、[]等の文字セットでは、注意が必要。量指定子は後半の1バイトだけの繰り返し、[]では前半の1バイトか後半の1バイトのどちらかにマッチする、という意味になる。
・いわゆる「ダメ文字」がある。よく言われる\以外にも、リストを表す@、正規表現で使われるメタ文字も対象になるので、かなりの文字が該当する。

日本語も一文字として扱いたいのなら、Unicode文字列として変換して...となります。
どうするかはややこしいので検索でもして調べてください。
    • good
    • 0
この回答へのお礼

お答えありがとう御座います。
No.1の方のお礼に書かせていただきましたが、「[」、「]」は不要でした。

>なにからなにに変換するのでしょうか?
perl内ではsjisは使用できないかと思い、何らかの文字コードに変換するのかと思い書かせていただきました。

>どうするかはややこしいので検索でもして調べてください。
そのややこしい部分をどのように記述すればよいのかを質問したつもりでした。

>固定の文字列ならあまり問題無い。
とのお答えもありましたが、No.1の方のお礼に書いたとおりどうにもうまくいきません。

意図がわかりずらい文章で申し訳ありませんが、よろしくお願い致します。

お礼日時:2011/06/03 17:54

フリーのサクラエディタ(

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

お答えありがとう御座います。
確かに「[」、「]」は不要でした。

「/^\*+\s*バージョン\s+(\d+)\s*\*+\s*$/」として実行した所↓のエラーがでました。
「Unmatched [ in regex; marked by <-- HERE in m/^\*+\s*バー <-- HERE ジョン\s+(\d+)\s*\*+\s*$/ at 」atの後は略させていただきました。

こちらで調べた所「ー」は「\ー」としろという情報がありましたのでこちらも試しましたが、うまくいかない状態です。

お礼日時:2011/06/03 17:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!