Skip to content

Commit

Permalink
Ruby: variables in regexp
Browse files Browse the repository at this point in the history
  • Loading branch information
shir committed Jun 14, 2011
1 parent 4171bbc commit e7b964f
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions ruby/variables-in-regexp.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Ruby: Переменные в регулярных выражениях.

Бывает что нужно вставить одно регулярное выражение в другое.
Это можно сделать так же как со строкой:

> REGEXP1 = /[A-Za-z0-9\_][A-Za-z0-9\-\_\.]+/
> /^#{REGEXP1}$/
=> /^(?-mix:[A-Za-z0-9\_][A-Za-z0-9\-\_\.]+)$/

Но при такой вставке могут быть проблемы при дальнейшем преобразовании,
например в строку. Сравните:

> /^#{REGEXP1}$/.to_s
=> "(?-mix:^(?-mix:[A-Za-z0-9\\_][A-Za-z0-9\\-\\_\\.]+)$)"

и

> /^[A-Za-z0-9\_][A-Za-z0-9\-\_\.]+$/.to_s
=> "(?-mix:^[A-Za-z0-9\\_][A-Za-z0-9\\-\\_\\.]+$)"

Как видно, в результате выражения различаются. Для того чтоб такого
не присходило можно воспользоваться методом `#source`:

> /^#{REGEXP1.source}$/.to_s
=> "(?-mix:^[A-Za-z0-9\\_][A-Za-z0-9\\-\\_\\.]+$)"

В этом случае результат получается аналогичный, как если бы мы не использовали
переменную.

0 comments on commit e7b964f

Please sign in to comment.