2010年12月 2日

[ruby-list:47670] Re: 文字列中に含まれる 8 進数表記 "\nnn" というパターンに正規表現でマッチさせたい

小西です。

答えは木村さんが示されているので、他の方が指摘されていない点についてのみ
返答したいと思います。

正規表現で\マークは、テキストで表現できない文字コードや、8進、16進の文字
コードを表現するために使われます。これは正規表現にかかわらず、プログラミ
ングの世界では割と一般的な用法です。


じゃあ、「単純に「\」を表現したいときはどうするか?」というところが問題
で、この場合には「\\」とタイプする必要があるのです。「\\」であれば
「\\\\」となります。

適当な正規表現の参考書をご覧になれば、もっと詳しい説明があります。

> 金子健介と申します。
> 8 進数表記と正規表現に関する質問です。
>
> "Ver.1.01 \000\243" という文字列から "\000" と "\243" を取り除くような場合の
> 汎用的な方法について、アドバイスをいただきたいです。
>
> 以下、試した Ruby のバージョンは 1.8.6 です。
>
> $ ruby -v
> ruby 1.8.6 (2009-06-08 patchlevel 369) [universal-darwin9.0]
>
>
> "\000" "\243" などが Ruby の 8 進数表記であり、 "\", "0", "0", "0" という
> 四文字からなる長さ 4 の文字列ではなくて、 "\000" という一文字のみからなる
> 長さ 1 の文字列である、ということは理解しました。
> http://www.ruby-lang.org/ja/man/html/_A5EAA5C6A5E9A5EB.html#a.a5.d0.a5.c3.a5.af.a5.b9.a5.e9.a5.c3.a5.b7.a5.e5.b5.ad.cb.a1
>
> "Ver.1.01 \000\243".split('')
> #=> ["V", "e", "r", ".", "1", ".", "0", "1", " ", "\000", "\243"]
>
> "\000".length
> #=> 1
>
> "\243".length
> #=> 1
>
>
> 可能ならば、 "\nnn" というパターンすべてに正規表現でマッチさせて、
> String#gsub でまとめて削除したいと思っています。
> しかし、正規表現でうまくマッチさせることができません。
>
> "Ver.1.01 \000\243".match( %r{\[0-9]+} )
> #=> warning: regexp has `]' without escape
>
> "Ver.1.01 \000\243".match( %r{\\[0-9]+} )
> #=> nil
>
>
> 以下のように "\000" "\243" を個別に指定すればマッチさせられるのですが、
> "\nnn" というパターンの全ての文字を個別に指定するのはできれば避けたいです。
>
> "Ver.1.01 \000\243".match( %r{\000} )[0]
> #=> "\000"
>
> "Ver.1.01 \000\243".match( %r{\243} )[0]
> #=> "\243"
>
>
> そこで質問なのですが、
>
> 1. 文字列に含まれる "\nnn" というパターンに正規表現でマッチさせることは可能なのでしょうか?
> 2. 可能である場合、どのような正規表現を書けば良いのでしょうか?
> 3. 不可能である場合、 "\nnn" というパターンのみを文字列から削除する良い方法はないでしょうか?
>
>
> 以上、よろしくお願いします。
>
>


--
+==============================================
KONISHI Hiromasa

RaaX co.,ltd.

1-12 N-24, E-17, Sapporo
065-0024 Japan

TEL +81-011-780-2481
FAX +81-011-780-2488
E-mail konishi@xxxxx
+==============================================

投稿者 xml-rpc : 2010年12月 2日 10:25
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/100437
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。