if targetfilename.match(/^V/)
puts "amit"
else
puts "ramit"
end
# result:
# "amit"
Почему это?Это связано с тем, что targetfilename.match(/^V/)
выводит объект Matchdata (нажмите на ссылку для полного описания этого объекта).Это объект, который содержит всю информацию, которая находится в «совпадении».Если совпадений нет, объект MatchData не возвращается, потому что возвращать нечего.Вместо этого вы получаете nil
.
Когда вы используете if
, если он пытается сравнить nil
, он обрабатывает его так же, как false
.
В основном,любое «фактическое» значение (кроме false
) обрабатывается так же, как и true
.По сути, он спрашивает
if (there's anything here)
do_this
else
do_something_else
end
Снова, позвольте мне повторить:
Если вещь после if
имеет значение false или nil ,оператор if преобразуется в «else».Если это что-нибудь еще , оно разрешается, как если бы оно получило «истинное» утверждение.
Регулярные выражения
/^V/
это то, что называется «регулярное выражение»;//
является литералом Regexp так же, как ""
является литералом String, а Regexps представлены классом Regexp так же, как строки представлены классом String.
Фактический "регулярное выражение "это то, что между слешами - ^V
.Это говорит:
^
: начало строки V
: заглавная буква V
Итак, /^V/
будет соответствовать любому регистру заглавной буквы "V" в начале строки.
Что еще можно вставить в регулярное выражение?Какие специальные символы?Попробуйте это regexp шпаргалку
Также, некоторые замечательные инструменты:
- Rubular - введите в ваше регулярное выражение, а затемтот же текст, и посмотрите, что соответствует.
- Strfriend - введите регулярное выражение и увидите его "визуально" представленным.