Курс языка программирования Raku / Регулярные выражения и грамматики / Регулярные выражения / Якоря

Начало и конец строки

Два якоря отмечают концы строки:

  • ^ совпадает в самом начале строки
  • $ совпадает в самом конце

Используйте ^, чтобы потребовать, чтобы совпадение начиналось с начала:

say so 'http://example' ~~ /^ http /; # True
say so 'see http://x'   ~~ /^ http /; # False

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

Если поставить ^ и $ вокруг шаблона, он вынужден совпасть со всей строкой, так что по краям ничего не останется:

say so 'hello'       ~~ /^ hello $/; # True
say so 'hello world' ~~ /^ hello $/; # False

Это очень распространённый приём для проверки — например, «а эта строка целиком число?»:

say so '2025' ~~ /^ \d+ $/; # True
say so '20a5' ~~ /^ \d+ $/; # False

Якоря строк текста

Когда в тексте несколько строк, парные якоря ^^ и $$ совпадают в начале и конце каждой строки текста, а не всего значения целиком. Разница с ^ и $ проявляется, как только нужный текст оказывается не на первой строке: одинарные якоря видят только всё значение и не срабатывают, а удвоенные совпадают на любой строке.

say so "cat\ndog" ~~ /^  dog  $/;  # False
say so "cat\ndog" ~~ /^^ dog $$/;  # True

Здесь \n начинает вторую строку. ^^ требует, чтобы dog стояло в начале строки, а $$ — в конце; на второй строке верно и то и другое, поэтому удвоенные якоря срабатывают там, где одинарные не могут.

Практика

Пройдите 1 тест по содержанию этой темы.

Навигация по курсу

Якоря   |   Тест — Якоря строки


💪 Или перейдите сразу к упражнениям этого раздела.