3.4. Якоря

We use cookies. Read the Privacy and Cookie Policy

3.4. Якоря

Якорь — это специальное выражение, соответствующее позиции в строке, а не конкретному символу или последовательности символов. Позже мы увидим, что это простой частный случай утверждения нулевой длины, то есть соответствия, которое не продвигает просмотр исходной строки ни на одну позицию.

Наиболее употребительные якоря уже были представлены в начале главы. Простейшими из них являются ^ и $, которые соответствуют началу и концу строки символов.

string = "abcXdefXghi"

/def/ =~ string  # 4

/аbс/ =~ string  # 0

/ghi/ =~ string  # 8

/^def/ =~ string # nil

/def$/ =~ string # nil

/^аbс/ =~ string # 0

/ghi$/ =~ string # 8

Впрочем, я немного уклонился от истины. Эти якоря на самом деле соответствуют началу и концу не строки символов (string), а строки текста (line). Вот что произойдет, если те же самые образцы применить к строке, внутри которой есть символы новой строки:

string = "abc def ghi"

/def/ =~ string  # 4

/abc/ =~ string  # 0

/ghi/ =~ string  # 8

/^def/ =~ string # 4

/def$/ =~ string # 4

/^abc/ =~ string # 0

/ghi$/ =~ string # 8

Однако имеются якоря A и , которые соответствуют именно началу и концу самой строки символов.

string = "abc def ghi"

/Adef/ =~ string # nil

/def/ =~ string # nil

/Aabc/ =~ string # 0

/ghi/ =~ string # 8

Якорь z отличается от  тем, что последний устанавливает соответствие перед конечным символом новой строки, а первый должен соответствовать явно.

string = "abc def ghi"

str2 << " "

/ghi/ =~ string # 8

/Aabc/ =~ str2   # 8

/ghiz/ =~ string # 8

/ghiz/ =~ str2   # nil

Можно также устанавливать соответствие на границе слова с помощью якоря  или с позицией, которая не находится на границе слова (B). Примеры использования метода gsub показывают, как эти якоря работают:

str = "this is a test"

str.gsub(//,"|") # "|this| |is| |a| |test|"

str.gsub(/В/, "-") # "t-h-i-s i-s a t-e-s-t"

He существует способа отличить начало слова от конца.

Данный текст является ознакомительным фрагментом.