Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PerlΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 22

Автор ΠœΠΈΡ…Π°ΠΈΠ» Π¨ΠΎΡ…ΠΈΡ€Π΅Π²

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ поиск ΠΎΠ±Ρ€Π°Π·Ρ†Π° выполняСтся с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ рСгистра, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСгистр ΠΏΡ€ΠΈ сопоставлСнии строки с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ, Ссли Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сопоставлСния Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ /i (ignore case). Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π±ΡƒΠΊΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΡ€Π°Π³ΠΌΠ° use locale. НапримСр:


use locale; 'Π’ строкС ΠΎΠ±Ρ€Π°Π·Π΅Ρ† Π΅ΡΡ‚ΡŒ' =~ /ΠžΠ±Ρ€Π°Π·Π΅Ρ†/; # ΠΎΠ±Ρ€Π°Π·Π΅Ρ† НЕ Π½Π°ΠΉΠ΄Π΅Π½! 'Π’ строкС ΠΎΠ±Ρ€Π°Π·Π΅Ρ† Π΅ΡΡ‚ΡŒ' =~ /ΠžΠ±Ρ€Π°Π·Π΅Ρ†/i; # ΠΎΠ±Ρ€Π°Π·Π΅Ρ† Π½Π°ΠΉΠ΄Π΅Π½


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сопоставлСния Π² тСкстС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ скалярной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² любой ΠΈΠ· условных конструкций, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


$text = 'Π§Π΅Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΡ‚ Π² Ρ‚Π΅ΠΌΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅'; # ΠΈΡ‰Π΅ΠΌ Π² этом тСкстС $found = $text =~ /ΠΊΠΎΡ‚/; # Π² $found Π±ΡƒΠ΄Π΅Ρ‚ '1' print 'Кошки Π½Π΅Ρ‚!' unless $text =~ /кошка/; # Π²Π΅Ρ€Π½Π΅Ρ‚ ''


ПослСднСС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ привязки ΠΊ строкС (!~), которая ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ (мСняСт Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ) Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сопоставлСния:


print 'Кошки Π½Π΅Ρ‚!' if $text !~ /кошка/;# Π²Π΅Ρ€Π½Π΅Ρ‚ '1'


Если опСрация привязки ΠΊ строкС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΎΠ±Ρ€Π°Π·Π΅Ρ† отыскиваСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ $_. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ поиском интСрполируСтся, поэтому вСсь ΠΎΠ±Ρ€Π°Π·Π΅Ρ† поиска ΠΈΠ»ΠΈ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. НапримСр:


$_ = 'Π‘Ρ‡Π°ΡΡ‚ΡŒΠ΅ - это ΠΊΠΎΠ³Π΄Π° тСбя ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚.'; # пСрСмСнная поиска $pattern = 'Π‘Ρ‡Π°ΡΡ‚ΡŒΠ΅'; # ΠΎΠ±Ρ€Π°Π·Π΅Ρ† для сопоставлСния print "$pattern Π½Π°ΠΉΠ΄Π΅Π½ΠΎ!" if /$pattern/;


Π’ составС ΠΎΠ±Ρ€Π°Π·Ρ†Π° поиска ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΈ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, извСстныС Π½Π°ΠΌ ΠΈΠ· Π»Π΅ΠΊΡ†ΠΈΠΈ 2, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


print 'Π’ строкС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° табуляция' if $string =~ m{\t};


Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ сопоставлСния строки ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ достаточно Π½Π°ΠΉΡ‚ΠΈ Π² строкС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ совпадСниС. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† совпадСт с Π½Π°Ρ‡Π°Π»ΠΎΠΌ подстроки 'ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ':


$text = 'Π£ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΠ² Π·Π΅Π»Π΅Π½Ρ‹Π΅ Π³Π»Π°Π·Π°?'; # ΠΈΡ‰Π΅ΠΌ здСсь $any = $text =~ /ΠΊΠΎΡ‚/; # ΠΎΠ±Ρ€Π°Π·Π΅Ρ† совпал с 'ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ'


Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ подстроку 'ΠΊΠΎΡ‚', ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стоит ΠΏΡ€ΠΎΠ±Π΅Π», Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† для сопоставлСния:


$cat = $text =~ / ΠΊΠΎΡ‚/; # ΠΎΠ±Ρ€Π°Π·Π΅Ρ† совпадСт с ' ΠΊΠΎΡ‚'


Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сопоставлСния программист ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΠΈ для ΠΎΠ±Ρ€Π°Π·Ρ†Π°: Π² этом случаС ΠΏΠ΅Ρ€Π΅Π΄ ограничитСлями указываСтся Π±ΡƒΠΊΠ²Π° m// (ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ сопоставлСния часто ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚: опСрация m//.) Π’ качСствС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° скобки ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π½Ρ‹Π΅ Π½Π΅Π±ΡƒΠΊΠ²Π΅Π½Π½Ρ‹Π΅ символы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


m($pattern) m{$pattern} m[$pattern] m<$pattern> m|$pattern| m!$pattern! m"$pattern" m#$pattern#


Π—Π°Π΄Π°Ρ‚ΡŒ собствСнныС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΠΈ Π±Ρ‹Π²Π°Π΅Ρ‚ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π² шаблон поиска Π²Ρ…ΠΎΠ΄ΠΈΡ‚ наклонная Ρ‡Π΅Ρ€Ρ‚Π°. Из Π΄Π²ΡƒΡ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π²Ρ‚ΠΎΡ€ΠΎΠΉ смотрится Π³ΠΎΡ€Π°Π·Π΄ΠΎ понятнСС:


/\/usr\/bin\/perl/ m{/usr/bin/perl}


НСдаром ΠΎΠ±ΠΈΠ»ΠΈΠ΅ Π»Π΅Π²Ρ‹Ρ… ΠΈ ΠΏΡ€Π°Π²Ρ‹Ρ… Π½Π°ΠΊΠ»ΠΎΠ½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Ρ‚ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ "учСничСским синдромом зубочисток" (LTS - Learning Toothpick Syndrome). Π’ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ сопоставлСния с Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ Π² качСствС ΠΎΠ±Ρ€Π°Π·Ρ†Π° Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ index(). Π‘Π°ΠΌΠΎΠ΅ интСрСсноС начинаСтся Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΠ±Ρ€Π°Π·Ρ†Π΅ поиска ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ мСтасимволы для сопоставлСния с шаблоном.

ΠžΡ‡Π΅Π½ΡŒ часто трСбуСтся ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² тСкстС Π½Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ строки, Π° ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: "число Π² скобках", "Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠ΅ слово с Π½Π°Ρ‡Π°Π»Π° строки", "список ΠΈΠ· ΠΏΠ°Ρ€ имя = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми" ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° поиска задаСтся шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π¨Π°Π±Π»ΠΎΠ½ - это ΠΎΠ±Ρ€Π°Π·Π΅Ρ†, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ, ΠΏΠΎΠΌΠΈΠΌΠΎ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, содСрТатся мСтасимволы. ΠœΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ (metacharacter) - это Π·Π½Π°ΠΊΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ записи ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ². Π’ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΠ΅ мСтасимволы ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ записи рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:


{} [] () ^ $ . | * + ? \


ΠŸΡ€ΠΈ нСобходимости Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π·Π΅Ρ† поиска ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих Π·Π½Π°ΠΊΠΎΠ² Π½Π΅ ΠΊΠ°ΠΊ мСтасимвол, Π° ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ символ, Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ особоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ("ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ"), поставив ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΊΠΎΡΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ (backslash):


$text =~ m"\." # содСрТится Π»ΠΈ Π² тСкстС Ρ‚ΠΎΡ‡ΠΊΠ°?


Как мСтасимвол Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π² рСгулярном Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ΄ΠΈΠ½ любой символ, ΠΊΡ€ΠΎΠΌΠ΅ Π·Π½Π°ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π½ΠΎΠ²ΠΎΠΉ строки (\n). НапримСр, для поиска ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… слов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ шаблон:


/само.Π°./ # ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚: 'самовар', 'самокат', 'самосад'... # НЕ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚: 'самолюб', 'самогон', 'самоход'...


Π’ рСгулярном Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΎΠ±Ρ€Π°Π·Ρ†Π°, любой ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ соотвСтствиСм строки ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎΠ±Ρ€Π°Π·Ρ†Π° - это Π½Π°Π±ΠΎΡ€ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ², Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°ΠΊΠΎΠΌ "Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ Ρ‡Π΅Ρ€Ρ‚Π°" ('|'), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся "мСтасимвол Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²" (alternation metacharacter). Поиск считаСтся ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ, Ссли Π½Π°ΠΉΠ΄Π΅Π½ΠΎ соотвСтствиС любой ΠΈΠ· Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


$text = 'ЧСрная кошка Π² Ρ‚Π΅ΠΌΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅'; # Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ здСсь print "Нашли ΠΊΠΎΡˆΠΊΡƒ!" if $text =~ /ΠΊΠΎΡ‚|кошка|ΠΊΠΎΡ‚Π΅Π½ΠΎΠΊ/;


Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ тСкста с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ ΠΎΠ±Ρ€Π°Π·Ρ†Π° выполняСтся слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, поэтому, Ссли Π½Π°Ρ‡Π°Π»ΠΎ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ² совпадаСт, Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»ΠΎ списка Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². Π˜Π½Π°Ρ‡Π΅ всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½Π° Π±ΠΎΠ»Π΅Π΅ короткая. Π—Π½Π°Ρ‡ΠΈΡ‚ шаблон Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ /ΠΊΠΎΡ‚Π΅Π½ΠΎΠΊ|ΠΊΠΎΡ‚|кошка/, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΡ‚Π΅Π½ΠΊΠ°, Π° Π·Π°Ρ‚Π΅ΠΌ - ΠΊΠΎΡ‚Π°:


$text = 'Π§Π΅Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΡ‚Π΅Π½ΠΎΠΊ Π² Ρ‚Π΅ΠΌΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅'; # ΠΈΡ‰Π΅ΠΌ здСсь print "Нашли ΠΊΠΎΡ‚Π΅Π½ΠΊΠ°!" if $text =~ /ΠΊΠΎΡ‚.Π½ΠΎΠΊ|ΠΊΠΎΡ‚|кошка/;


Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π» Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° шаблон с мСтасимволом "Ρ‚ΠΎΡ‡ΠΊΠ°", Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ соотвСтствия слову "ΠΊΠΎΡ‚Π΅Π½ΠΎΠΊ" Π² любом написании - Ρ‡Π΅Ρ€Π΅Π· "Π΅" ΠΈ Ρ‡Π΅Ρ€Π΅Π· "Ρ‘". Часто ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ рСгулярного выраТСния с Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°ΠΌΠΈ выглядит Π³ΠΎΡ€Π°Π·Π΄ΠΎ изящнСС, Ρ‡Π΅ΠΌ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ условноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:


return if $command =~ /exit|quit|stop|bye/i;


Если Π² ΠΎΠ±Ρ€Π°Π·Ρ†Π΅ послС Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ² ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈΠ»ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹, Ρ‚ΠΎ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π²Ρ‹Π±ΠΎΡ€Π° Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ скобки. НапримСр:


$lotr =~ /(Bilbo|Frodo) Baggins/; # ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ…ΠΎΠ±Π±ΠΈΡ‚ΠΎΠ²


Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ мСтасимволов ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π² шаблонС ΠΎΠ΄ΠΈΠ½ символ ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π°. Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ класс символов, ΡƒΠΊΠ°Π·Π°Π² Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках Π½Π°Π±ΠΎΡ€ символов, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π² класс. ΠšΠ»Π°ΡΡΡ‹ символов ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° шаблон с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ символы. Π Π°Π΄ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° запишСм шаблон для слов, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π°:


/[Π²ΠΊΠ»Ρ€Ρ‚]ΠΎΡ‚/ # ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚: 'Π²ΠΎΡ‚','ΠΊΠΎΡ‚','Π»ΠΎΡ‚','Ρ€ΠΎΡ‚','Ρ‚ΠΎΡ‚'


Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ шаблона с нСсколькими классами символов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставляСт ΠΎΠ΄Π½Ρƒ Π±ΡƒΠΊΠ²Ρƒ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… символов:


/[мс][ΡƒΠ»][Ρ…ΠΎ][Π°Π½]/ # ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚: 'ΠΌΡƒΡ…Π°', 'слон' # Π° Ρ‚Π°ΠΊΠΆΠ΅: 'суоа', 'ΠΌΠ»Ρ…Π½', 'слоа' ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅


Π’ классС символов вмСсто пСрСчислСния ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ символа, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… минусом:


[0-9] вмСсто [0123456789] [A-Z] вмСсто [ABCDEFGHIJKLMNOPQRSTUVWXYZ]


Указывая нСсколько Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ классС, запишСм шаблон для ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ Ρ†ΠΈΡ„Ρ€Ρ‹:


/[0-9a-fA-F]/# ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚: '5', 'b', 'D' ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅


Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс Π·Π½Π°ΠΊ '-', Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ пСрСчислСнных Π² классС символов ΠΈΠ»ΠΈ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚ΠΎΠΉ. ΠŸΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Π΅ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс, всС мСтасимволы (ΠΊΡ€ΠΎΠΌΠ΅ ']') Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ символы. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Π°ΠΊ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ для поиска Π·Π½Π°ΠΊΠ° прСпинания ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· скобок:


[-.,;:!?] # Π·Π½Π°ΠΊΠΈ прСпинания [()[\]{}] # скобки: \] прСдставляСт скобку ']'


Иногда трСбуСтся Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ понятиС "всС, ΠΊΡ€ΠΎΠΌΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… символов": для этого Π² описании класса символов сразу послС ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ скобки ставится мСтасимвол отрицания ('^'). НапримСр, Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ для "любого символа, ΠΊΡ€ΠΎΠΌΠ΅ Π·Π½Π°ΠΊΠΎΠ² прСпинания" ΠΈΠ»ΠΈ "любого Π½Π΅Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠ³ΠΎ символа":


[^-.,;:!?] # всС, ΠΊΡ€ΠΎΠΌΠ΅ этих Π·Π½Π°ΠΊΠΎΠ² прСпинания [^0-9] # Π½Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹


Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс символ '^', Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π² спискС символов ΠΈΠ»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ символа '\':


[*^] ΠΈΠ»ΠΈ Ρ‚Π°ΠΊ: [\^]


Для сокращСнной записи классов символов Π² рСгулярных выраТСниях прСдусмотрСны ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ обозначСния, состоящиС ΠΈΠ· латинской Π±ΡƒΠΊΠ²Ρ‹ с ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ косой Ρ‡Π΅Ρ€Ρ‚ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π΅ΠΉ. Π’ΠΎΡ‚ ΠΎΠ½ΠΈ:


\d - любая дСсятичная Ρ†ΠΈΡ„Ρ€Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ [0-9] \D - любой символ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ†ΠΈΡ„Ρ€Ρ‹: [^0-9] ΠΈΠ»ΠΈ [^\d] \w - символ, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΉ для записи ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°:[a-zA-Z0-9_] \W - ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ символа \w, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ [^\w] \s - ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΉ символ: ΠΏΡ€ΠΎΠ±Π΅Π», \t, \n, \r ΠΈΠ»ΠΈ \f \S - любой Π½Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΉ символ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ [^\s]


Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих мСтасимволов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ интСрСсныС ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹. НапримСр, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, содСрТится Π»ΠΈ Π² тСкстС число ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Ρ†ΠΈΡ„Ρ€, ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ΅ Π»ΡŽΠ±Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами: