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

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

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

Π Π°Π½Π΅Π΅ Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ ΡƒΠΆΠ΅ упоминался ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ /i, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ поиск с ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ ΠΈ строчными Π±ΡƒΠΊΠ²Π°ΠΌΠΈ. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сопоставлСния:

[x]. /g - ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² тСкстС всС соотвСтствия ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ (Global);

[x]. /i - ΠΈΡΠΊΠ°Ρ‚ΡŒ соотвСтствиС ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра Π±ΡƒΠΊΠ² (case-Insensitive);

[x]. /s - Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ тСкст ΠΊΠ°ΠΊ ΠΎΠ΄Π½Ρƒ строку (Single-line);

[x]. /m - Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ тСкст ΠΊΠ°ΠΊ многострочный (Multi-line) с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ \n ;

[x]. /o - ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Once);

[x]. /x - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ синтаксис рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (eXtended).

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


m/ # Π½Π°Ρ‡Π°Π»ΠΎ рСгулярного выраТСния <A # Π½Π°Ρ‡Π°Π»ΠΎ Ρ‚Π΅Π³Π°: <A [^>]+? # Π΄Π°Π»Π΅Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ символы, ΠΊΡ€ΠΎΠΌΠ΅ > HREF # ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ гипСрссылки \s*=\s* # Π·Π½Π°ΠΊ =, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ["']? # ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° ΠΈΠ»ΠΈ апостроф ( # Π½Π°Ρ‡Π°Π»ΠΎ Π·Π°Ρ…Π²Π°Ρ‚Π° значСния [^'" >]+? # адрСс ссылки: всС, ΠΊΡ€ΠΎΠΌΠ΅ ',",ΠΏΡ€ΠΎΠ±Π΅Π»Π° ΠΈ > ) # ΠΊΠΎΠ½Π΅Ρ† Π·Π°Ρ…Π²Π°Ρ‚Π° значСния ['"]? # ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° ΠΈΠ»ΠΈ апостроф \s* # Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ > # ΠΊΠΎΠ½Π΅Ρ† Ρ‚Π΅Π³Π° /igx; # ΠΊΠΎΠ½Π΅Ρ† рСгулярного выраТСния # соотвСтствуСт, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: <a id='ru' href="index.html">


ЗаписанноС Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅, рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ становится доступным для понимания, Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. А ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ рСгулярныС выраТСния ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° быстродСйствиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠšΡ€ΠΎΠΌΠ΅ поиска, рСгулярныС выраТСния часто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для Π·Π°ΠΌΠ΅Π½Ρ‹ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… совпадСний Π½Π° Π½ΠΎΠ²Ρ‹Π΅ значСния. Для этого сущСствуСт опСрация Π·Π°ΠΌΠ΅Π½Ρ‹ (substitution), которая пытаСтся Π½Π°ΠΉΡ‚ΠΈ Π² строковой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ соотвСтствиС ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ, Π° Ссли Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚, Ρ‚ΠΎ замСняСт Π½Π°ΠΉΠ΄Π΅Π½Π½ΡƒΡŽ подстроку Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π·Π°ΠΌΠ΅Π½Ρ‹ выглядит Ρ‚Π°ΠΊ:


$variable =~ s/ΠΎΠ±Ρ€Π°Π·Π΅Ρ†/Π·Π°ΠΌΠ΅Π½Π°/; # Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $variable отыскиваСтся строка 'ΠΎΠ±Ρ€Π°Π·Π΅Ρ†', # ΠΈ Ссли Π½Π°ΠΉΠ΄Π΅Π½Π°, Ρ‚ΠΎ ΠΎΠ½Π° замСняСтся Π½Π° 'Π·Π°ΠΌΠ΅Π½Π°'


ВсС, Ρ‡Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π΄ΠΎ этого ΠΏΡ€ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ сопоставлСния, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ для Π»Π΅Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ указываСтся ΠΎΠ±Ρ€Π°Π·Π΅Ρ† поиска. ЛСвая ΠΈ правая части ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, поэтому Ρ‚Π°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.


$pattern = 'шило'; # ΠΎΠ±Ρ€Π°Π·Π΅Ρ† $replacement = 'ΠΌΡ‹Π»ΠΎ'; # Π·Π°ΠΌΠ΅Π½Π° $text =~ s/$pattern/$replacement/; # ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ 'шило' Π½Π° 'ΠΌΡ‹Π»ΠΎ'


Π’ ΠΏΡ€Π°Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ ссылки Π½Π° Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ значСния. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами Π΄Π²Π° ΠΊΡ€Π°ΠΉΠ½ΠΈΡ… слова Π² Ρ‚Ρ€ΠΎΠΉΠΊΠ΅ слов, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами:


$text = 'ΠΌΠ°Ρ‚ΡŒ Π»ΡŽΠ±ΠΈΡ‚ Π΄ΠΎΡ‡ΡŒ'; $text =~ s/(\S+)\s+(\S+)\s+(\S+)/\3 \2 \1/; # Π² $text Π±ΡƒΠ΄Π΅Ρ‚ 'Π΄ΠΎΡ‡ΡŒ Π»ΡŽΠ±ΠΈΡ‚ ΠΌΠ°Ρ‚ΡŒ'


Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ s/// ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ всС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, упомянутыС для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сопоставлСния m//. НапримСр, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ /g ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ всС Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ Π² тСкстС соотвСтствия. НапримСр:


$our_computers =~ s/Windows/Linux/g;


Π£ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ /e (expression evaluation), ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ вычисляСтся ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ этом Π² Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰Π΅ΠΉ части ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ссылки Π½Π° Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок соотвСтствия. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для Π±ΠΎΠ»Π΅Π΅ "ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ" Π·Π°ΠΌΠ΅Π½Ρ‹ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… соотвСтствий. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ пСрСвСсти Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρƒ ΠΈΠ· ΡˆΠΊΠ°Π»Ρ‹ ЦСльсия Π² ΡˆΠΊΠ°Π»Ρƒ Π€Π°Ρ€Π΅Π½Π³Π΅ΠΉΡ‚Π°:


$text = 'Π‘ΡƒΠΌΠ°Π³Π° воспламСняСтся ΠΏΡ€ΠΈ 233C.'; $text =~ s/(\d+\.?\d*)C\b/int($1*1.8+32).'F'/e; # Π² $text Π±ΡƒΠ΄Π΅Ρ‚: 'Π‘ΡƒΠΌΠ°Π³Π° воспламСняСтся ΠΏΡ€ΠΈ 451F.'


РСгулярныС выраТСния ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… конструкциях. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ split() ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ для поиска Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ строки Π½Π° части. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ строку Π½Π° подстроки ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΠ· ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов:


@substrings = split /\s+/, $text; # Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° части


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


@result = grep /$pattern/, @source; # ΠΎΡ‚ΠΎΠ±Ρ€Π°Ρ‚ΡŒ элСмСнты


Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ map ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π·Π°ΠΌΠ΅Π½Ρ‹ Π² соотвСтствии с рСгулярным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎ всСм элСмСнтам массива, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


@hrefs = ('http://regex.info', 'http://regexp.ru'); map s{http://}{}, @hrefs; # ΡƒΠ±Ρ€Π°Ρ‚ΡŒ 'http://' ΠΈΠ· ссылок


РСгулярныС выраТСния Π΄Π°ΡŽΡ‚ программисту Π½ΠΎΠ²Ρ‹ΠΉ взгляд Π½Π° тСкстовыС Π΄Π°Π½Π½Ρ‹Π΅: вмСсто ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… символов ΠΈ простых подстрок ΠΎΠ½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ шаблонами, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π΅ΠΌΡƒ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ простыС ΠΈ эффСктивныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 8.1 для справки ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ основныС обозначСния, примСняСмыС для записи рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Perl. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ рСгулярных выраТСниях ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡Π΅Ρ€ΠΏΠ½ΡƒΡ‚ΡŒ ΠΈΠ· стандартной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ Perl ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ Π”ΠΆΠ΅Ρ„Ρ„Ρ€ΠΈ Π€Ρ€ΠΈΠ΄Π»Π° "РСгулярныС выраТСния".

Π’Π°Π±Π»ΠΈΡ†Π° 8.1. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ обозначСния для записи рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹//ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΠΈ рСгулярного выраТСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ/$pattern/\ΠΎΡ‚ΠΌΠ΅Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ символаm{C:\\windows}()Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° шаблонов ΠΈΠ»ΠΈ сохранСниС значСния/(\w\w\w)+/|Π²Ρ‹Π±ΠΎΡ€ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²/кошСлСк|Тизнь/[]класс символов: любой символ ΠΈΠ· пСрСчислСнных/[0-9a-fA-F]/[^]ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ класс символов: любой символ, ΠΊΡ€ΠΎΠΌΠ΅ пСрСчислСнных/[^0-9]/ ΠœΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ .любой символ, ΠΊΡ€ΠΎΠΌΠ΅ \n (соотвСтствуСт Π»ΡŽΠ±ΠΎΠΌΡƒ символу, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ \n с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ /s)/(.+)/\dдСсятичная Ρ†ΠΈΡ„Ρ€Π°m{ВрСмя=\d+ сСк}\DΠ½Π΅ дСсятичная Ρ†ΠΈΡ„Ρ€Π°/(\D*)\d+/\wΠ°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π·Π½Π°ΠΊ/\s+\w+\s+/\WΠ½Π΅ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π·Π½Π°ΠΊ/\W\W\W/\sΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΉ символs/\s+/ /\Sлюбой символ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ/\S+/ УтвСрТдСния ^Π½Π°Ρ‡Π°Π»ΠΎ строки (соотвСтствуСт Π½Π°Ρ‡Π°Π»Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ /m)/^\w+/$ΠΊΠΎΠ½Π΅Ρ† строки (соотвСтствуСт ΠΊΠΎΠ½Ρ†Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ /m)/\d+$/\bΠ³Ρ€Π°Π½ΠΈΡ†Π° слова (ΠΌΠ΅ΠΆΠ΄Ρƒ \w ΠΈ \W ΠΈΠ»ΠΈ \W ΠΈ \w)/stop\b/\Bлюбая позиция, ΠΊΡ€ΠΎΠΌΠ΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ слова/stop\B/\AΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΠΎ строки, Π΄Π°ΠΆΠ΅ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ /m/\A[#]/\zΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½Π΅Ρ† строки, Π΄Π°ΠΆΠ΅ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ /m/\w+\z/\ZΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½Π΅Ρ† строки ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ \n Π² ΠΊΠΎΠ½Ρ†Π΅ строки, Π΄Π°ΠΆΠ΅ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ /m/\w+\Z/\Gпозиция Π² строкС, равная Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pos() Escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ \t \n \r \f \a \bΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы: \b Π² классС символов выступаСт ΠΊΠ°ΠΊ символ Backspace (0x08), Π²Π½Π΅ Π΅Π³ΠΎ - ΠΊΠ°ΠΊ Π³Ρ€Π°Π½ΠΈΡ†Π° слова/[\a\b\f\r\n\t]/\0 \x \c \NΠΊΠΎΠ΄Ρ‹ символов/\033\x1F\cZ/ /\x{263a}/\l \L \u \U \Q \EΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ/\Q$pattern\E/ ΠšΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ * *?любоС число ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ 0 (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹)/\s*/ /\S*?/+ +?ΠΎΠ΄Π½ΠΎ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹)/\d+/ /\D+?/? ??ноль ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹)/.?/ /[.a-z]??/{n} {n}?Ρ€ΠΎΠ²Π½ΠΎ n ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹)/\w{8}/ /\w{5}?/{n,} {n,}?n ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹)/\d{2,}/ /\d{5,}?/{n,m} {n,m}?ΠΎΡ‚ n Π΄ΠΎ m ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹)/[A-Z]{1,12}/ /[a-z]{0,3}?/