ГоловнаКаталогБлогРейтингЕ-Пошта 
 
 
Зробити домашньою у вибране  

  Відповісти  

  Попередні відповіді  
Joe
regex(7)
--------------------------------------------------------------------------------

ІМ'Я
       regex - POSIX 1003.2 регулярні вирази

ОПИС
   Регулярні вирази (РВ), як визначено у POSIX 1003.2, мають дві форми:
   сучасні РВ  (ті, що у egrep; 1003.2  зве їх  "розширені"  РВ)
   та застарілі РВ (ті, що у ed(1); 1003.2 "базові" РВ).  
   Застарілі РВ  існують, переважно, для сумісності із старими програмами;
   про них ідеться наприкінці.
   1003.2  залишає деякі риси РВ синтаксису та семантики недопрацьованими,
   позначка "(!)" відмічає такі рішення,
   які, мабуть, не будуть повністю підтримані у других 1003.2 втіленнях-мені здається, краще "реалізаціях".

   РВ (сучасний) це одна (!) чи більше не порожніх=непорожніх (!) гілок, відокремлених символом "|".
   Він збігається з будь-чим, що збігається з однією з гілок.

   Гілка це один (!) чи більше зчеплених шматків=частин.
   Узгоджується збіг для першого шматка, затим для другого та т.д.

   За шматком, називаним=який називають атомом, може йти один символ (!) із=з "*", "+", "?", чи вказівка повторення.
   Атом, супроводжений *, збігається з послідовністю 0 чи більше збігів атома.
   Атом, супроводжений +, збігається з послідовністю 1 чи більше збігів атома.
   Атом, супроводжений ?, збігається з послідовністю 0 чи 1 збігом атома.

   Вказівка=Вказівкою повторення є дужка "{", за якою іде беззнакове десяткове ціле,
   за яким можливо йде кома ","
   за якою можливо йде ще одне беззнакове десяткове ціле,
   після чого завжди йде дужка "}".
   Ціле має бути у проміжку між 0 та RE_DUP_MAX (255)(!) включно,
   та якщо їх указано два,
   перше не має перевищувати друге.
   Атом, за яким іде вказівка повторювання з двома цілими i та j
   збігається з послідовністю від i до j (включно) збігів з атомом.
   Атом, за яким іде вказівка повторювання з одним цілим і та без коми
   збігається з послідовністю точно і збігів з атомом.
   Атом, за яким іде вказівка повторювання з одним цілим і та кома
   збігається з послідовністю і або більше збігів з атомом.

   Атом - це задужкований=взятий в дужки регулярний вираз
   (відповідний збігу з регулярним виразом),
   порожні дужки "()" ( відповідні порожньому рядку ) (!),
   вираз у квадратних дужках ( дивіться нижче ),
   крапка "." (відповідна будь-якому символу),
   дашок "^" (відповідний початку рядка),
   $ (відповідна кінцю рядка),
   зворотна похила  "\", за якою йде один із символів "^.[$()|*+?{\"
   (відповідна  цьому символу, а не його службовим обов'язкам),
   зворотна похила  "\", за якою йде будь-який інший символ (!)
   (відповідна  цьому символу, ніби зворотної похилої нема (!)),
   чи одинарний символ без усяких закидів (відповідний цьому символу).
   Фігурна дужка "{", за якою йде не цифра, це звичайний символ,
   а не початок вказівки повторення (!).
   Заборонено завершати=завершувати РВ  символом "\".

   Вказівка вибору - це перелік символів у квадратних дужках "[ ]".
   Звичайно, вона збігається з одним будь-яким символом із переліку (та дивіться нижче ).
   Якщо перелік починається з дашка "^",
   він збігається з одним будь-яким символом, якого нема у переліку.
   Якщо два символи у переліку розділено рискою "-",
   це є скорочення для усіх символів поміж цих двох (включно) в абетці
   наприклад, "[0-9]" у ASCI збігається з будь-якою десятковою цифрою.
   Заборонено (!)  вказувати одну межу для двох проміжків, наприклад, "a-c-e".
   Проміжки дуже залежать від абеток, тож переносні програми мають уникати їх.

   Щоб уключити "]" у перелік,
   зробить її першою у переліку (чи другою, якщо перша - дашок "^").
   Щоб уключити  риску "-" у перелік, зробить її першим чи останнім символом
   чи другою межею у проміжку.
   Щоб мати риску "-" першою межею проміжку,
   задужкуйте=візьміть її у квадратні дужки з крапкою "[." та ".]".
   За винятком цих та декількох сполучень із "[" (дивіться наступний параграф),
   усі інші службові символи, зворотна похила "\" включно,
   утрачають їх службове значення у вказівці вибору.

   У вказівці вибору порівняльний елемент
       (символ,
       багатосимвольна послідовність, яка порівнюється так, нібито вона - один символ,
       чи ім'я порівняльної послідовності для обох)
   задужкований квадратними дужками=взятий у квадратні дужки з крапкою "[." та ".]"
   уявляє-не подобається мені воно тут, можливо "являє собою" послідовність символів цього порівняльного елементу,
   тобто є вказівкою підміни.
        
   Ця послідовність вважається одним елементом переліку у вказівці вибору.  
   Вказівка підміни, що має багатосимвольний порівняльний елемент  
   може збігтися більш ніж з одним символом.
   наприклад, якщо порівняльна послідовність уключає елемент "ch",
   то регулярний вираз РВ "[[.ch.]]*c" збігається
   з першими п'ятьма символами у "chchcc".
  
   (* Примітка перекладача. Наведений приклад не працює.
       Вказівка підміни зручна при пошуку у староукраїнських  текстах єрів, юсів, ятів,
       наприклад р[[.єр.]]к,
       а також у шрифтах  UTF та китайських. Дивіться cname.h *)

   У вказівці вибору
   елемент порівняння задужкований у "[=" та "=]" є класом рівнозначності,
   що уявляє послідовність символів усього класу рівнозначності
   різнозначних указаному, себе включно.

   (Якщо нема інших рівнозначних елементів
   вказівка "[=" та "=]" обробляється так саме, нібито це дужки "[." та ".]" )

   Наприклад, якщо о та дашок ^ є члени класу рівнозначності (інших у класі нема),
   то "[[=o=]]", "[[=^=]]", та "[o^]" є синонімами.
   Клас рівнозначності не дозволено (!) використовувати як кінцеву межу проміжку.

   У вказівці вибору
   ім'я класу символів задужковане у  "[:name:]",
   означає перелік усіх символів у класі на ім'я name.
   Стандартними іменами класів символів є:
   alnum     digit      punct
   alpha      graph   space
   blank      lower    upper
   cntrl        print     xdigit
   Про символи, що визначають ці імена, йдеться у wctype(3).
    
   При українізації можна визначити інші імена або символи.
   Клас символів краще не використовувати як кінцеву межу проміжку.

   Є два особливих позначення серед вказівок:
   вказівки  "[[:<:]]" та "[[:>:]]"
   позначають порожній рядок на початку та кінці слова.
   Слово визначено як послідовність символів слова,
   перед якою та після якої нема символів слова.
   Символи слова - це клас символів на ім'я alnum (що визначені у  wctype(3))
   чи символ підкреслювання.
   Це є додаток, сумісний, та не вказаний у POSIX 1003.2,
   тож має використовуватися із застереженням  у програмах,
   які будуть встановлені у не POSIX системах.

   У випадку, коли РВ може збігтися більш ніж з одним рядочком у рядку,
   РВ збігається з тим, що починається раніш.
   Якщо від якоїсь позиції рядка РВ може збігтись з більш ніж одним рядочком,  
   РВ збігається з найдовшим.
   Підвирази РВ також збігаються з найдовшим можливим рядочком,
   але довжина усього збігу має бути щонайбільшою
   для підвиразу, що починається раніш у РВ,
   цей підвираз має перевагу над тим, що починається пізніше.
   Підвирази вищого рівня тому мають перевагу
   над власними підвиразами нижчого рівня.

   Довжина збігу виміряється у символах, а не у порівняльних елементах.  
   Пустий рядок вважається довше за відсутність збігу.
   Наприклад, "bb*" збігається з трьома серединними символами у "abbbc",
   "(wee|week)(knights|nights)" збігається з усіма десятьома символами "weeknights",
   коли  "(.*).*" перевіряється щодо "abc"
   задужкований підвираз збігається з усіма трьома символами,
   та коли "(a*)*" перевіряється щодо "bc",
   то і усе РВ, і задужкований підвираз збігається з порожнім рядком.

   Якщо задано порівняння незалежне від регістру,
   вплив цього такий, ніби різницю у регістрах вилучили з абетки.
   Коли буква, що існує у різних регістрах,
   з'являється як звичайний символ поза вказівкою вибору,
   вона перетворюється на вказівку вибору з обома регістрами,
   наприклад, "x" стає "[xX]".
   Коли вона з'являється у вказівці вибору,
   усі регістри додаються до вказівки вибору,
   так що, наприклад, "[x]" стає "[xX]" та "[^x]" стає "[^xX]".

   Нема особливого обмеження на довжину РВ (!).
   Програмам, що будуть встановлені на різних системах,
   не треба використовувати РВ довгіше за 256 байтів,
   бо втілення може відмовитись прийняти таке РВ
   та залишитись POSIX-сумісним.

   Застарілі ("базові") регулярні вирази відрізняються у декількох рисах.
   "|", "+", and "?" є звичайні символи
   та нема ніякої заміни для їх функціональності.
   Межами для вказівки повторення є "\{" та "\}",
   а "{" та "}" - це звичайні символи.
   Дужками для вкладених підвиразів є  "\(" та "\)",
   а "(" та ")" - це звичайні символи.  
    Дашок "^" є звичайним символом, окрім на початку РВ
   чи (!) на початку задужкованого підвиразу,
  "$" є звичайним символом, окрім у кінці РВ
   чи (!) у кінці задужкованого підвиразу,
   та зірочка "*" є звичайним символом, якщо вона є на початку РВ
   чи на початку задужкованого підвиразу,
   ( після можливого першого дашка "^").
   Нарешті, є один новий тип атому - зворотне посилання:
   зворотна похила "\", за якою йде не нульова десяткова цифра d
   збігається з тою самою послідовністю символів
   з якою збігся d-тий задужкований підвираз
   (підвирази рахують зліва направо за відкриваючими дужками)
   так що (наприклад) "\([bc]\)\1" збігається з "bb" чи "cc", але не з "bc".


ТАКОЖ ДИВІТЬСЯ

   regex(3)

   POSIX 1003.2, section 2.8 (Regular Expression Notation).

НЕЛАДИ -а ось ця трактовка слова BUG мені подобається!!!

   Мати дві форми РВ - це головний біль.

   Поточна 1003.2 специфікація каже що ")" є звичайним символом
   якщо нема невідповідного "(";
   це був несподіваний наслідок помилки у слові, тож бажана зміна.
   Уникайте покладатися на це.

   Зворотні посилання - це жахливий головний біль,
   із-за них виникає більшість проблем при втіленні.
   Вони також трохи недбало визначені  
   (Чи "a\(\(b\)*\2\)*d" збігається з "abbbd"?).
   Уникайте використовувати їх.

   Визначення у 1003.2 незалежного від регістру порівняння неясне.
   Що воно таке є : "one case implies all cases"
   наразі дискутується серед утілювачів=реалізаторів, хоча теж криво. Як варіант - "програмістів".

   Синтаксис щодо меж слів неймовірно бридкий.

АВТОР

   Ця сторінка взята з пакету regex Генри=Генрі або Ґенрі Спенсера.
Joe
Спробував вичитати переклад. Знайшов трохи помилок (але здебільшого граматичних, так як в регулярних виразах не розбираюсь, і трошки лінь було вчитуватися).
Хоча, по-моєму, переклад якісний.

Червоним виділено помилки, які необхідно виправити.
Зеленим те, що на мою думку, варто було б змінити для більшої зрозумілості/милозвучності.


  Логін:
  Пароль:
Книга Фріланс на західному ринку
Книга Фріланс на західному ринку

APServer | SiMan CMS | Лічильник відвідувань | Тека сайтів | Рейтинг | Форум | Download | Шаблони сторінок | Посібник Smarty | Підручник PHP | Статті/Огляди