понедельник, 6 августа 2012 г.

Regular Expression Basic

Regular Expression Basic.

Код:

print "help".sub(/p/, "lo")

Вывод:

hello

С помощью .sub мы "p" меняем на "lo".

Код:

print "I like Ruby".sub(/like/, "love")

Вывод:

I love Ruby

Просто с помощью .sub - substitution заменяется "like" на "love".

Код:

print "I like Ruby".sub(/I/, "You")

Вывод:

You like Ruby


С помощью .sub "I" заменяется на "You".

Код:

print "Ruby".sub(/^/, "Hello ")


Вывод:

Hello Ruby

С помощью .sub и замены "^" в начало строки вклинивается слово "Hello ".

Код:

print "Ruby".sub(/$/, " rocks")

Вывод:

Ruby rocks

С помощью .sub и замены "$" в конец строки вклинивается слово "rocks".

Код:

print "I only have $5 in my wallet".sub(/\$\d/, "five dollars")

Вывод:

I only have five dollars in my wallet

С помощью .sub мы заменили $5 на "five dollars". Эту конструкцию  - /\$\d/ - я поняла так:
надо заменить $ и d (digit) число "5".

Код:

print "I now have $50 in my wallet".sub(/\$\d+/, "fifty dollars")

Вывод:

I now have fifty dollars in my wallet


С помощью .sub мы меняем $50 на "fifty dollars"). Здесь то же самое, что в предыдущем посте, только в этой конструкции /\$\d+/ к d прибавляется + . Это показывает, что надо поменять не только d (digit), но и нули. Если один и больше нулей, надо писать плюсик. Вродь так. Только что протестила у себя на компе.

Код:

puts "String has vowels" if "I love Ruby".match(/[aeiou]/)

Вывод:

String has vowels

Мы кагбэ говорим интерпретатору: "Напиши строку "String has vowels", если в фразе "I love Ruby" совпадут буквы с [aeiou]. Даже если одна совпадет, интерпретатор выдаст нужную нам строку.


Код:


program_name = "interactive-2.1.1"
matches = program_name.match(/(.*)-(\d+)\.(\d+)\.(\d+)/)
name, major, minor, tiny = matches[1..-1]
print "Name: ", name, " Major: ", major, " Minor: ", minor, " Tiny: ", tiny


Вывод:

Name: interactive Major: 2 Minor: 1 Tiny: 1

1. Мы задаем переменную program_name = "interactive-2.1.1".
2. Задаем переменную matches = program_name.match(/(.*)-(\d+)\.(\d+)\.(\d+)/). Т.е. по сути, если  program_name заменить на ее значение, то получится  matches = program_name.match aka interactive-2.1.1.match. и дальше в скобочках идут параметры сравнения. Совпадают ли эти два значения. * - это слово "interactive". Одна звездочка, наверное, потому что не имеет значение количество букв, хз. Дальше идет тире, а потом числа. Т.е. тоже дан универсальный эквивалент - d+ - присутствует ли любое число. Таким образом схема получается следующая:
Создаем переменную matches(совпадения) = interactive-2.1.1и в скобках универсальные символы. Абстрактный * и d+, означающие любое слово и любые числа. Причем d даны сразу с плюсиком, шоб, если это не цифра, а число, тоже выдало результат.
Также смею предположить, что \. - это экранирование. Ну, шоб программа знала, что точку надо учитывать. Или хз. Шо-та я уже сомневаюсь)
3. name, major, minor, tiny = matches[1..-1]. Не знаю, шо це. Вроде похожи на переменные. Но типа они равны той переменной (matches) со значением [1..-1].
Что такое [1..-1] - хз. Но у меня есть предположение, что имеется в виду вся область совпадений. Т.е. с 1 по -1 пишется, чтобы включить ВСЕ элементы.
4. Выводится на экран строка "Name: " и переменная(?) name, которая у нас в данном случае равна слову "interactive". Далее выводится строка " Major: " и переменная(?) major, которая в данном случае равна 2, то же самое с minor и tiny.

Код:


phone_pattern = /^((\(\d{3}\) |\d{3}-)\d{3}-\d{4}|\d{3}\.\d{3}\.\d{4})$/
num = "(123) 234-2345"
if num =~ phone_pattern
  print "pattern matched"
else
  print "pattern not matched"
end


Вывод:

pattern matched

В общем, надо почитать, что за что отвечает в этих регулярках. Единственное, что понимаю, это то, что ^ - начало строки, $ - конец строки, а d - digit. Но там свой синтаксис, надо будет разобраться :)

Комментариев нет:

Отправить комментарий