Non sono un esperto di rubini e potrebbe sembrare una domanda stupida ... ma sono troppo dispiaciuto per una stranezza (credo) che ho trovato nel matcher di RSpec chiamato match.ruby rspec e confronto di stringhe
Si conosce match
immette in input una stringa o un'espressione regolare. Esempio:
"test".should match "test" #=> will pass
"test".should match /test/ #=> will pass
La strana inizia quando si inseriscono i caratteri regex speciali nella stringa di input:
"*test*".should match "*test*" #=> will fail throwing a regex exception
Ciò significa che (ho pensato) che le stringhe di input sono interpretati come espressione regolare, allora dovrei fuggire regex speciale caratteri per rendere funziona:
"*test*".should match "\*test\*" #=> will fail with same exception
"*test*".should match /\*test\*/ #=> will pass
da questo test di base, capisco che tratta i match
stringhe di input come espressioni regolari ma non è così permetti di sfuggire ai caratteri speciali regex.
Sono vero? Non è un comportamento singolare? Voglio dire, è una stringa o un'espressione regolare!
EDIT dopo la risposta:
seguito DigitalRoss (a destra) di rispondere alle seguenti test superato:
"*test*".should match "\\*test\\*" #=> pass
"*test*".should match '\*test\*' #=> pass
"*test*".should match /\*test\*/ #=> pass
Grazie hai ragione Ho modificato la domanda con i test di codice che hai citato –
Puoi anche sfuggire alle espressioni regolari come stringhe, ad esempio % r {\\ * test \\ *} Non così utile con questo perché hai ancora bisogno di barre retroverse, ma l'ho trovato di valore inestimabile quando si combina per/ – Ghoti
leggermente correlato , ma mi sono imbattuto in un problema simile - il mio era intorno a confronti di stringhe contenenti caratteri di escape, \ nsome text \ n 'per esempio. corretto usando virgolette per impedire a rspec di fare doppio escape. – lfender6445