From: Kensuke Kaneko Date: 2010-12-02T21:33:32+09:00 Subject: [ruby-list:47673] Re: 文字列中に含まれる 8 進数表記 "\nnn" というパターンに正規表現でマッチさせたい 小西さん 金子です。 正規表現における \ の意味と \ そのものの表現の仕方については理解しているつもりだったのですが、 これを機会に正規表現の専門書にも目を通してみたいと思います。ありがとうございました。 2010年12月2日10:25 小西 弘将 : > 小西です。 > > 答えは木村さんが示されているので、他の方が指摘されていない点についてのみ > 返答したいと思います。 > > 正規表現で\マークは、テキストで表現できない文字コードや、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@raax.co.jp > +============================================== > > > -- Kensuke Kaneko