2017-01-04 8 views
0

を逃れるRubyの正規表現私はこの文字列を持つすべての

string_to_replace.sub(/if [ "${USER_CONFIG}" != "" ] ; then/, 'Sample Only!!!!!') 

しかし、私は希望得ることはありません結果。

この文字列ですべての正規表現文字を一度にエスケープする方法はありますか?

/if [ "${USER_CONFIG}" != "" ] ; then/ 

これに:この

+1

*リテラル*文字列を置き換えると、正規表現を使用することに意味はありません。正規表現は、一致させる必要がある文字列があらかじめ分かっていないときに使うのに適していますが、これは正規表現で定義できるパターンに従います。 –

答えて

2

変更

  1. 'if [ "${USER_CONFIG}" != "" ] ; then'

    または

  2. string_to_replace

    又は

    /if \[ "\${USER_CONFIG}" != "" \] ; then/

    又は

  3. sub()関数で"if \[ \"\${USER_CONFIG}\" != \"\" \] ; then"

  • +0

    ありがとう、それは働いた!どうしてそれが機能するのか尋ねたいのですが?私が最初のコードがうまくいかない理由を知っているかどうか知りたいです。私はルビーを始めています。このトピックについて私は理解を深めていきたいと思います。 –

    +0

    '[]'と '$'はリテラルを得るためにエスケープするために必要な特殊文字です。 '/ if \ [" \ $ {USER_CONFIG} "!=" "\]を試してみると、/'このパターンはうまくいくでしょう。 –

    +0

    あなたの1,2、および4はすべて文字列を返します。これは、OPが求めていたものではありません。そして、あなたの3は、OPが挑戦しようとしている可能性が最も高い方法でOPが求めていたものを与えます(OPはそれを「一度に」したいと思っていました)。したがって、それはまったくその質問に対する答えではありません。しかし、これはOPが何をしていたはずであるかを間接的に示唆しています。 – sawa

    0

    質問に対する真の答えは、はい、あります。そして、それを行う方法は次のとおりです:

    Regexp.new(Regexp.escape(string_to_replace)) 
    #=> /if\ \[\ "\$\{USER_CONFIG\}"\ !=\ ""\ \]\ ;\ then/ 
    
    関連する問題