私はルビーの専門家ではありませんが、これは愚かな質問と思われるかもしれません...しかし、私はマッチと呼ばれるRSpec matcherで見つけた奇妙なことについてはあまりにも嫌です。ruby rspecと文字列の比較
あなたはmatch
が文字列か正規表現を入力することを知っています。
"*test*".should match "*test*" #=> will fail throwing a regex exception
この手段(私は思った)その入力文字列は、その後、私は特別な正規表現をエスケープする必要があり、正規表現として解釈されます。例:あなたは特別な正規表現の入力文字列内の文字を挿入すると
"test".should match "test" #=> will pass
"test".should match /test/ #=> will pass
奇妙で始まりますそれが動作するようにする文字:
"*test*".should match "\*test\*" #=> will fail with same exception
"*test*".should match /\*test\*/ #=> will pass
この基本的なテストからは、私は正規表現としてそのmatch
扱い入力文字列を理解し、それはしていません特別な正規表現文字をエスケープすることができます。
本当ですか?これは単なる行動ではありませんか?つまり、文字列か正規表現です! ANSWER AFTER
EDIT:DigitalRoss後
(右)渡された次のテストに答える:
"*test*".should match "\\*test\\*" #=> pass
"*test*".should match '\*test\*' #=> pass
"*test*".should match /\*test\*/ #=> pass
おかげで、あなたが正しいです。私はあなたが言及したコードのテストと質問を編集しました。 –
ます。また、文字列のような正規表現逃れることができ、例えば %rを{\\ * test \\ *} バックスラッシュは依然として必要ですが、/ – Ghoti
と軽く関連する場合は非常に重要ですしかし、私は同様の問題に遭遇しました。私はエスケープされた文字を含む文字列比較の周りにありました。たとえば、\ nsome text \ nです。 rspecが二重エスケープするのを防ぐために二重引用符で固定されています。 – lfender6445