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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования для UnixΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 61

Автор Π­Ρ€ΠΈΠΊ Π Π΅ΠΉΠΌΠΎΠ½Π΄

Π‘ΠΏΠ΅ΠΊΡ‚Ρ€ ΠΌΠΈΠ½ΠΈ-языков простираСтся ΠΎΡ‚ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… (с нСявными дСйствиями) ΠΊ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ (с явными дСйствиями). Бинтаксис Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ fetchmail(1) ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Π½ΡŒ слабый ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык, Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык с нСявной ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ. Π―Π·Ρ‹ΠΊΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкстов troff ΠΈ PostScript ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ языками с большим количСством встроСнной ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ области.

НСкоторыС ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠΈΠ½ΠΈ-языки для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π³Ρ€Π°Π½ΠΈΡ‡Π°Ρ‚ с ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. Они Π΄ΠΎΡΡ‚ΠΈΠ³Π°ΡŽΡ‚ Π΄Π°Π½Π½ΠΎΠ³ΠΎ уровня, ΠΊΠΎΠ³Π΄Π° явно ΡΠ²Π»ΡΡŽΡ‚ΡΡ языками Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π°, Ρ‚.Π΅. ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ условныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹ (ΠΈΠ»ΠΈ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ)[78] с функциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для использования Π² качСствС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… структур. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π½ΠΈΡ…, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ языки Ρ‚ΠΎΠ»ΡŒΠΊΠΎ отчасти ΡΠ²Π»ΡΡŽΡ‚ΡΡ языками Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π°. Π’ Π½ΠΈΡ… ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… структур ΠΊΠ°ΠΊ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт Ρ‚ΠΎΠ³ΠΎ, для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ фактичСски ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ bc(1) ΠΈ dc(1), рассмотрСнныС Π² Π³Π»Π°Π²Π΅ 7, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ спСциализированных ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΠΈΠ½ΠΈ-языков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ явно ΡΠ²Π»ΡΡŽΡ‚ΡΡ языками Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π°.

Π’Π°ΠΊΠΈΠ΅ языки, ΠΊΠ°ΠΊ Emacs Lisp ΠΈ JavaScript, находятся Π² области ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ². Π―Π·Ρ‹ΠΊΠΈ Emacs Lisp ΠΈ JavaScript ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для использования Π² качСствС ΠΏΠΎΠ»Π½Ρ‹Ρ… языков программирования, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² спСциализированных срСдах. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ½ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈ рассмотрСнии встроСнных языков сцСнариСв.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² прСдставляСт собой ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΉ нСопрСдСлСнности. ΠžΠ±ΠΎΡ€ΠΎΡ‚Π½ΠΎΠΉ стороной этого являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя мСньшС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎ срСдС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π‘ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΉ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π±ΠΎΠ»Π΅Π΅ развитая онтология Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Shell ΠΈ Tcl ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простой ΠΎΠ½Ρ‚ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ, a Perl, Python ΠΈ Java β€” Π±ΠΎΠ»Π΅Π΅ слоТной. Π”Π°Π½Π½Ρ‹Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ языки ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π³Π»Π°Π²Π΅ 14.

8.2. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈ-языков

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΈΠ½ΠΈ-языков Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Одна ΠΈΠ· Π½ΠΈΡ… Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈΡΡ Π² инструмСнтарии ΠΌΠΈΠ½ΠΈ-языками ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ. Другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° цСлСсообразно Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ для прилоТСния нСстандартный ΠΌΠΈΠ½ΠΈ-язык. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ Ρ€Π°Π·Π²ΠΈΡ‚ΡŒ ΠΎΠ±Π° аспСкта конструкторского ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ, ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Ρ‹ состоит ΠΈΠ· ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

8.2.1. Π£Ρ‡Π΅Π±Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: sng

Π’ Π³Π»Π°Π²Π΅ 6 Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»Π°ΡΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° sng(1), ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰Π°Ρ PNG-Ρ„Π°ΠΉΠ» Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. Π€ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… SNG заслуТиваСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ рассмотрСния здСсь для контраста, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ Π²ΠΏΠΎΠ»Π½Π΅ являСтся ΡƒΠ·ΠΊΠΎΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠΈΠ½ΠΈ-языком. Он описываСт располоТСниС Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π½Π΅ связываСт с Π½ΠΈΠΌΠΈ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий.

Однако SNG Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΎΠ±Ρ‰ΡƒΡŽ Π²Π°ΠΆΠ½ΡƒΡŽ характСристику с ΡƒΠ·ΠΊΠΎΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΌΠΈΠ½ΠΈ-языками, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ структурированныС Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ PNG, β€” ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π±Π΅Π· использования ΠΌΠΈΠ½ΠΈ-языка Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ срСдствам рСдактирования, прСобразования ΠΈ создания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ конструкторских "прСдполоТСниях" Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π’ случаС SNG добавляСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠ°ΠΊ ΡƒΠ·ΠΊΠΎΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-язык, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для простого просмотра ΠΈ рСдактирования с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… срСдств.

8.2.2. Π£Ρ‡Π΅Π±Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: рСгулярныС выраТСния

Одним ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² спСцификации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСриодичСски появляСтся Π² инструмСнтах Unix ΠΈ языках сцСнариСв, являСтся рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (regular expression, ΠΈΠ»ΠΈ regexp для краткости). Π—Π΄Π΅ΡΡŒ рСгулярныС выраТСния Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-язык для описания тСкстовых шаблонов. Часто рСгулярныС выраТСния Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΈΠ½ΠΈ-языки. РСгулярныС выраТСния Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ распространСны, Ρ‡Ρ‚ΠΎ ΠΈΡ… Π΅Π΄Π²Π° Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈ-языком, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС прСдставляло Π±Ρ‹Π»ΠΎ собой ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ ΠΊΠΎΠ΄Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ (ΠΈ нСсовмСстимыС) возмоТности поиска.

Π’ Π΄Π°Π½Π½ΠΎΠΌ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π½Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ подробности, ΠΊΠ°ΠΊ POSIX-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ ссылки ΠΈ особСнности ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ способа ΠΈΡ… примСнСния прСдставлСно Π² ΠΊΠ½ΠΈΠ³Π΅ "Mastering Regular Expressions" [22].

РСгулярныС выраТСния ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π»ΠΈΠ±ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ, Π»ΠΈΠ±ΠΎ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ со строками. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ срСдством для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с рСгулярными выраТСниями являСтся ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° grep(1), Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСправляСт со стандартного Π²Π²ΠΎΠ΄Π° Π½Π° стандартный Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. Π€ΠΎΡ€ΠΌΠ° записи рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΊΡ€Π°Ρ‚ΠΊΠΎ прСдставлСна Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 8.1.


Π’Π°Π±Π»ΠΈΡ†Π° 8.1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ строка "x.y" x, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт любой символ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρƒ "x\.y" Ρ…, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Ρ‚ΠΎΡ‡ΠΊΠ° с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρƒ "xz?y" Ρ…, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа z с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρƒ, Ρ‚.Π΅. "xy" ΠΈΠ»ΠΈ "xzy", Π½ΠΎ Π½Π΅ "xz" ΠΈΠ»ΠΈ "xdy" "xz*y" Ρ…, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт любоС количСство символов z, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ слСдуСт y, Ρ‚.Π΅. "xy" ΠΈΠ»ΠΈ "xzy" ΠΈΠ»ΠΈ "xzzzy", Π½ΠΎ Π½Π΅ "xz" ΠΈΠ»ΠΈ "xdy" "xz+y" x, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько экзСмпляров символа z, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ слСдуСт Ρƒ, Ρ‚.Π΅. "xzy" ΠΈΠ»ΠΈ "xzzy", Π½ΠΎ Π½Π΅ "xy", "xz" ΠΈΠ»ΠΈ "xdy" "s[xyz]t" s, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт любой ΠΈΠ· символов Ρ…, Ρƒ ΠΈΠ»ΠΈ z, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт t, Ρ‚.Π΅. "sxt", "syt" ΠΈΠ»ΠΈ "szt", Π½ΠΎ Π½Π΅ "st" ΠΈΠ»ΠΈ "sat" "a[x0-9]b" Π°, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Π»ΠΈΠ±ΠΎ Ρ…, Π»ΠΈΠ±ΠΎ символ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 0-9, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт b, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, "axb", "a0b" ΠΈΠ»ΠΈ "Π°4b", Π½ΠΎ Π½Π΅ "ab" ΠΈΠ»ΠΈ "aab" "s[^xyz] t" s, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт любой символ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ…, Ρƒ ΠΈΠ»ΠΈ z, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт t, Ρ‚.Π΅. "sdt" ΠΈΠ»ΠΈ "set", Π½ΠΎ Π½Π΅ "sxt", "syt" ΠΈΠ»ΠΈ "szt" "s[^x0-9]t" s, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт любой символ, ΠΊΡ€ΠΎΠΌΠ΅ x ΠΈΠ»ΠΈ символа Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 0-9, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт t, Ρ‚.Π΅. "slt" ΠΈΠ»ΠΈ "smt", Π½ΠΎ Π½Π΅ "sxt", "s0t" ΠΈΠ»ΠΈ "s4t" "^x” x Π² Π½Π°Ρ‡Π°Π»Π΅ строки, Ρ‚.Π΅. "xzy" ΠΈΠ»ΠΈ "xzzy", Π½ΠΎ Π½Π΅ "yzy" ΠΈΠ»ΠΈ "ΡƒΡ…Ρƒ" "x$" Ρ… Π² ΠΊΠΎΠ½Ρ†Π΅ строки, Ρ‚.Π΅. "yzx" ΠΈΠ»ΠΈ "yx", Π½ΠΎ Π½Π΅ "yxz" ΠΈΠ»ΠΈ "zxy"

БущСствуСт большоС количСство второстСпСнных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² записи рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

1. Π’ыраТСния-маски. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ соглашСний ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ символов-шаблонов (wildcard), использовавшийся Π² Ρ€Π°Π½Π½ΠΈΡ… ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°Ρ… Unix для сопоставлСния ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ². БущСствуСт всСго 3 символа-шаблона: * β€” соотвСтствуСт любой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ символов (ΠΊΠ°ΠΊ .* Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ…); ? β€” соотвСтствуСт Π»ΡŽΠ±ΠΎΠΌΡƒ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΌΡƒ символу (ΠΊΠ°ΠΊ . Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ…); [...] β€” соотвСтствуСт классу символов ΠΊΠ°ΠΊ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ…. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°Ρ… (csh, bash, zsh) ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ шаблон {} для Π²Ρ‹Π±ΠΎΡ€Π° подстроки. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ x{a,b}c соотвСтствуСт строкам xac ΠΈΠ»ΠΈ xbc, Π½ΠΎ Π½Π΅ xc. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°Ρ… выраТСния-маски ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ дальнСйшСС Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

2. Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ рСгулярныС выраТСния. Π€ΠΎΡ€ΠΌΠ° записи, принятая Π² исходной ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ grep(1) для извлСчСния ΠΈΠ· Ρ„Π°ΠΉΠ»Π° строк, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. ВыраТСния этого Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² строковом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ed(1) ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ sed(1). ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»Ρ‹ старой ΡˆΠΊΠΎΠ»Ρ‹ Unix ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Π΄Π°Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ основной, ΠΈΠ»ΠΈ "ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ", Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ²ΡˆΠΈΠ΅ΡΡ с Π±ΠΎΠ»Π΅Π΅ соврСмСнными инструмСнтами, склонны ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, которая описана Π½ΠΈΠΆΠ΅.

3. Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ рСгулярныС выраТСния. Π—Π°ΠΏΠΈΡΡŒ, принятая Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ вСрсии grep, egrep(1) для извлСчСния ΠΈΠ· Ρ„Π°ΠΉΠ»Π° строк, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. РСгулярныС выраТСния Π² Lex ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Emacs вСсьма Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ egrep-разновидности.