• ベストアンサー

rubyの正規表現で"["を使いたいのですが、正しく実行できません

rubyの正規表現で"["を使いたいのですが、正しく実行できません #! ruby -Ks a ="test[test" b ="test[" if /#{b}/ =~ a print "hit" end エラー内容は test.rb:4: invalid regular expression; '[' can't be the last character ie. can't start range at the end of pattern: /test[/ (RegexpError) "\["と文字を入力することで解決するかと思いましたが上手くいきませんでした。 rubyのバージョンは1.8.2です。宜しくお願いいたします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.2

b= を書き換えるなら#1の方の回答の通りですが、 if /test\[/ =~ a と書かないということは、b は実際にはどこかから読み込んだデータが入っているわけですよね。 if /#{Regexp.escape(b)}/ =~ a とすれば、bに含まれる正規表現記号を適切にエスケープして文字列そのままの正規表現にしてくれます。 もちろん、正規表現にせずに、単純に文字列が含まれるかと言うことなら、 if a.include?(b) if a[b] とか書きます。

CTester
質問者

お礼

Regexp.escape()を使って上手く行きました! これで正規表現記号を処理できそうです。 ありがとうございました!

その他の回答 (1)

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

「[」は正規表現で使われるメタ文字の一つですから、「[」という文字そのものとマッチさせるためには、正規表現では「\[」を指定する必要があります。「test[」とマッチさせるためなら「test\[」と指定。 ですが、さらに、 ダブルクオートでくくられた文字列中では、「\」という文字そのものが、バックスラッシュ記法の文字として使われていますから、「\」という文字はダブルクオートでくくられた文字列中では「\\」と指定する必要があります。 ですので、「test\[」という文字列を指定するためには、 b="test\\[" とする必要があります。もしくは、シングルクオートで b='test\[' と指定してもかまいません。

CTester
質問者

お礼

「\」という文字はダブルクオートでくくられた文字列中では「\\」と指定する必要があったんですね! b='test\['という書き方で今後は対応していこうと思います! ありがとうございました

関連するQ&A

専門家に質問してみよう