string_to_replace.sub(/if [ "${USER_CONFIG}" != "" ] ; then/, 'Sample Only!!!!!')
しかし、私は希望得ることはありません結果。
この文字列ですべての正規表現文字を一度にエスケープする方法はありますか?
/if [ "${USER_CONFIG}" != "" ] ; then/
これに:この
string_to_replace.sub(/if [ "${USER_CONFIG}" != "" ] ; then/, 'Sample Only!!!!!')
しかし、私は希望得ることはありません結果。
この文字列ですべての正規表現文字を一度にエスケープする方法はありますか?
/if [ "${USER_CONFIG}" != "" ] ; then/
これに:この
変更
'if [ "${USER_CONFIG}" != "" ] ; then'
または
string_to_replace
又は
/if \[ "\${USER_CONFIG}" != "" \] ; then/
又は
sub()
関数で"if \[ \"\${USER_CONFIG}\" != \"\" \] ; then"
ありがとう、それは働いた!どうしてそれが機能するのか尋ねたいのですが?私が最初のコードがうまくいかない理由を知っているかどうか知りたいです。私はルビーを始めています。このトピックについて私は理解を深めていきたいと思います。 –
'[]'と '$'はリテラルを得るためにエスケープするために必要な特殊文字です。 '/ if \ [" \ $ {USER_CONFIG} "!=" "\]を試してみると、/'このパターンはうまくいくでしょう。 –
あなたの1,2、および4はすべて文字列を返します。これは、OPが求めていたものではありません。そして、あなたの3は、OPが挑戦しようとしている可能性が最も高い方法でOPが求めていたものを与えます(OPはそれを「一度に」したいと思っていました)。したがって、それはまったくその質問に対する答えではありません。しかし、これはOPが何をしていたはずであるかを間接的に示唆しています。 – sawa
質問に対する真の答えは、はい、あります。そして、それを行う方法は次のとおりです:
Regexp.new(Regexp.escape(string_to_replace))
#=> /if\ \[\ "\$\{USER_CONFIG\}"\ !=\ ""\ \]\ ;\ then/
*リテラル*文字列を置き換えると、正規表現を使用することに意味はありません。正規表現は、一致させる必要がある文字列があらかじめ分かっていないときに使うのに適していますが、これは正規表現で定義できるパターンに従います。 –