пЕЦСКЪПМШЕ БШПЮФЕМХЪ (ЬЮАКНМШ).

б ДЮММНИ ЦКЮБЕ НОХЯШБЮЕРЯЪ ЯХМРЮЙЯХЯ ПЕЦСКЪПМШУ БШПЮФЕМХИ. вЮЫЕ БЯЕЦН Б Perl НМХ ХЯОНКЭГСЧРЯЪ Б НОЕПЮРНПЮУ ОНХЯЙЮ Х ГЮЛЕМШ РЮЙХУ ЙЮЙ s//, m/, НОЕПЮРНПЮУ ЯБЪГЙХ =~ ХКХ != Х Р.Д. йЮЙ ОПЮБХКН БЯЕ ЩРХ НОЕПЮРНПШ ХЛЕЧР ЯУНФХЕ НОЖХХ РЮЙХЕ ЙЮЙ:

i - МЕ ПЮГКХВЮРЭ ЯРПНВМШЕ Х ГЮЦКЮБМШЕ АСЙБШ.
m - ЯВХРЮРЭ ЯРПНЙС ЛМНЦНЯРПНВМНИ.
s - НДМНЯРПНВМЮЪ ЯРПНЙЮ.
x - ПЮЯЬХПЕММШИ ЯХМРЮЙЯХЯ ( ХЯОНКЭГНБЮМХЕ ОПНАЕКНБ Х ЙНЛЛЕМРЮПХЕБ)

нАШВМН БЯЕ ЩРХ НОЖХХ НАНГМЮВЮЧР ЙЮЙ '/x'. хУ ЛНФМН ХЯОНКЭГНБЮРЭ ДЮФЕ БМСРПХ ЬЮАКНМНБ, ХЯОНКЭГСЪ МНБСЧ ЙНМЯРПСЙЖХЧ (?...)

пЕЦСКЪПМШЕ БШПЮФЕМХЪ ХКХ ЬЮАКНМШ (pattern) РН ФЕ ЯЮЛНЕ, ВРН Х regexp ОПНЖЕДСПШ Б Unix. бШПЮФЕМХЪ Х ЯХМРЮЙЯХЯ ГЮХЛЯРБНБЮМШ ХГ ЯБНАНДМН ПЮЯОПНЯРПЮМЪЕЛШУ ОПНЖЕДСП V8 цЕМПХ яОЕМЯЕПЮ (Henry Spencer), РЮЛ ФЕ НМХ ОНДПНАМН Х НОХЯЮМШ.

б ЬЮАКНМЮУ ХЯОНКЭГСЧРЯЪ ЯКЕДСЧЫХЕ ЛЕРЮЯХЛБНКШ (ЯХЛБНКШ НАНГМЮВЮЧЫХЕ ЦПСООШ ДПСЦХУ ЯХЛБНКНБ) ВЮЯРН МЮГШБЮЕЛШЕ egrep - ЯРЮМДЮПРНЛ:

\ - ЯВХРЮРЭ ЯКЕДСЧЫХИ ЛЕРЮЯХЛБНК ЙЮЙ НАШВМШИ ЯХЛБНК.
^ - МЮВЮКН ЯРПНЙХ
. - НДХМ ОПНХГБНКЭМШИ ЯХЛБНК. йПНЛЕ '\n' - ЙНМЕЖ ЯРПНЙХ.
$ - ЙНМЕЖ ЯРПНЙХ
| - ЮКЭРЕПМЮРХБЮ (ХКХ)
() - ЦПСООХПНБЙЮ
[] - ЙКЮЯЯ ЯХЛБНКНБ

лЕРЮЯХЛБНКШ ХЛЕЧР ЛНДХТХЙЮРНПШ (ОХЬСРЯЪ ОНЯКЕ ЛЕРЮЯХЛБНКЮ):

* - ОНБРНПЪЕРЯЪ 0 ХКХ АНКЭЬЕЕ ВХЯКН ПЮГ
+ - -//- 1 ХКХ АНКЭЬЕЕ ВХЯКН ПЮГ
? - 1 ХКХ 0 ПЮГ
{n} - РНВМН n ПЮГ
{n,} - ОН ЛЕМЭЬЕИ ЛЕПЕ ПЮГ
{n,m} - МЕ ЛЕМЭЬЕ n, МН Х МЕ АНКЭЬЕ m

бН БЯЕ ДПСЦХУ ЯКСВЮЪУ ТХЦСПМШЕ ЯЙНАЙХ ЯВХРЮЧРЯЪ НАШВМШЛХ (ПЕЦСКЪПМШЛХ) ЯХЛБНКЮЛХ. рЮЙХЛ НАПЮГНЛ '*' ЩЙБХБЮКЕМРМЮ {0,} , '+' - {1,} Х '?' - {0,1}. n Х m МЕ ЛНЦСР АШРЭ АНКЭЬЕ 65536.

оН СЛНКВЮМХЧ ДЕИЯРБХЕ ЛЕРЮЯХЛБНКНБ "ФЮДМН" (greedy). яНБОЮДЕМХЕ ПЮЯОПНЯРПЮМЪЕРЯЪ ЯРНКЭЙН ПЮГ, ЯЙНКЭЙН БНГЛНФМН, МЕ СВХРШБЮЪ ПЕГСКЭРЮР ДЕИЯРБХЪ ЯКЕДСЧЫХУ ЛЕРЮЯХЛБНКНБ. еЯКХ БШ УНРХРЕ "СЛЕМЭЬХРЭ ХУ ЮООЕРХР", РН ХЯОНКЭГСИРЕ ЯХЛБНК '?'. щРН МЕ ХГЛЕМЪЕР ГМЮВЕМХЕ ЛЕРЮЯХЛБНКНБ, ОПНЯРН СЛЕМЭЬЮЕР ПЮЯОПНЯРПЮМЕМХЕ. рЮЙХЛ НАПЮГНЛ:

*? - ЯРЮМЕР 0 Х АНКЕЕ
+? - 1 Х АНКЕЕ
?? - 0 ХКХ 1 ПЮГ
{n}? - РНВМН n ПЮГ
{n,}? - МЕ ЛЕМЭЬЕ n ПЮГ
{n,m}? - АНКЭЬЕ ХКХ ПЮБМН n Х ЛЕМЭЬЕ m ПЮГ

ьЮАКНМШ ПЮАНРЮЧР РЮЙ ФЕ, ЙЮЙ Х ДБНИМШЕ ЙЮБШВЙХ, ОНЩРНЛС Б МХУ ЛНФМН ХЯОНКЭГНБЮРЭ `\` - ЯХЛБНКШ (АЩЙЯКЩЬ-ЯХЛБНКШ):

\t - ЯХЛБНК РЮАСКЪЖХХ
\n - МНБЮЪ ЯРПНЙЮ
\r - ОЕПЕБНД ЙЮПЕРЙХ
- ОЕПЕБНД ТНПЛЮРЮ
\v - БЕПРХЙЮКЭМЮЪ РЮАСКЪЖХЪ
\a - ГБНМНЙ
\e - escape
\033 - БНЯЭЛЕПХВМЮЪ ГЮОХЯЭ ЯХЛБНКЮ
\x1A - ЬЕЯРМЮДЖЮРЕПХВМЮЪ
\c[ - control ЯХЛБНК
\l - МХФМХИ ПЕЦХЯРП ЯКЕДСЧЫЕЦН ЯХЛБНКЮ
\u - БЕПУМХИ ПЕЦХЯРП -//-
\L - БЯЕ ЯХЛБНКШ Б МХФМЕЛ ПЕЦХЯРПЕ ДН \E
\U - Б БЕПУМЕЛ -//-
\E - НЦПЮМХВХРЕКЭ ЯЛЕМШ ПЕЦХЯРПЮ
\Q - НРЛЕМЮ ДЕИЯРБХЪ ЙЮЙ ЛЕРЮЯХЛБНКЮ

дНОНКМХРЕКЭМН Б Perl ДНАЮБКЕМШ ЯКЕДСЧЫХЕ ЛЕРЮЯХЛБНКШ:

\w - ЮКТЮБХРМН-ЖХТПНБНИ ХКХ '_' ЯХЛБНК
\W - МЕ -//-
\s - НДХМ ОПНАЕК
\S - НДХМ МЕ ОПНАЕК
\d - НДМЮ ЖХТПЮ
\D - НДМЮ МЕ ЖХТПЮ

нАПЮРХРЕ БМХЛЮМХЕ, ВРН БЯЕ ЩРН "НДХМ" ЯХЛБНК. дКЪ НАНГМЮВЕМХЪ ОНЯКЕДНБЮРЕКЭМНЯРХ ОПХЛЕМЪИРЕ ЛНДХТХЙЮРНПШ. рЮЙ:

\w+ - ЯКНБН
\d+ - ЖЕКНЕ ВХЯКН
[+-]?\d+ - ЖЕКНЕ ЯН ГМЮЙНЛ
[+-]?\d+\.?\d* - ВХЯКН Я РНВЙНИ

йПНЛЕ РНЦН ЯСЫЕЯРБСЧР ЛМХЛШЕ ЛЕРЮЯХЛБНКШ. нАНГМЮВЮЧЫХЕ МЕ ЯСЫЕЯРБСЧЫХЕ ЯХЛБНКШ Б ЛЕЯРЕ ЯЛЕМШ ГМЮВЕМХЪ. рЮЙХЕ ЙЮЙ:

\b - ЦПЮМХЖЮ ЯКНБЮ
\B - МЕ ЦПЮМХЖЮ ЯКНБЮ
\A - МЮВЮКН ЯРПНЙХ
\Z - ЙНМЕЖ ЯРПНЙХ
\G - ЙНМЕЖ ДЕИЯРБХЪ m//g

цПЮМХЖЮ ЯКНБЮ (\b) - ЩРН ЛМХЛЮЪ РНВЙЮ ЛЕФДС ЯХЛБНКЮЛХ \w Х \W. бМСРПХ ЙКЮЯЯЮ ЯХЛБНКНБ '\b' НАНГМЮВЮЕР ЯХЛБНК backspace (ЯРХПЮМХЪ). лЕРЮЯХЛБНКШ \A Х \Z - ЮМЮКНЦХВМШ '^' Х '$', МН ЕЯКХ МЮВЮКН ЯРПНЙХ '^' Х ЙНМЕЖ ЯРПНЙХ '$' ДЕИЯРБСЧР ДКЪ ЙЮФДНИ ЯРПНЙХ Б ЛМНЦНЯРПНВМНИ ЯРПНЙЕ, РН \A Х \Z НАНГМЮВЮЧР МЮВЮКН Х ЙНМЕЖ БЯЕИ ЛМНЦНЯРПНВМНИ ЯРПНЙХ.

еЯКХ БМСРПХ ЬЮАКНМЮ ОПХЛЕМЪЕРЯЪ ЦПСООХПНБЙЮ (ЙПСЦКШЕ ЯЙНАЙХ), РН МНЛЕП ОНДЯРПНЙХ ЦПСООШ НАНГМЮВЮЕРЯЪ ЙЮЙ '\ЖХТПЮ'. гЮЛЕРЭРЕ, ВРН ГЮ ЬЮАКНМНЛ Б ОПЕДЕКЮУ БШПЮФЕМХЪ ХКХ АКНЙЮ ЩРХ ЦПСООШ НАНГМЮВЮЧРЯЪ ЙЮЙ '$ЖХТПЮ'. йПНЛЕ ЩРНЦН ЯСЫЕЯРБСЧР ДНОНКМХРЕКЭМШЕ ОЕПЕЛЕММШЕ:

$+ - НАНГМЮВЮЕР ОНЯКЕДМЕЕ ЯНБОЮДЕМХЕ
$& - БЯЕ ЯНБОЮДЕМХЕ
$` - БЯЕ ДН ЯНБОЮДЕМХЪ
$' - БЯЕ ОНЯКЕ ЯНБОЮДЕМХЪ

оПХЛЕП:


$s = "нДХМ 1 ДБЮ 2 Х РПХ 3";
if ($s =~ /(\d+)\D+(\d+)/)
    {
        print "$1\n";# пЕГСКЭРЮР '1'
        print "$2\n";# '2'
        print "$+\n";# '2'
        print "$&\n";# '1 ДБЮ 2'
        print "$`\n";# 'нДХМ '
        print "$'\n";# ' Х РПХ 3'
   }

Perl БЕПЯХХ 5 ЯНДЕПФХР ДНОНКМХРЕКЭМШЕ ЙНМЯРПСЙЖХХ ЬЮАКНМНБ:

(?#ЙНЛЛЕМРЮПХИ) - ЙНЛЛЕМРЮПХИ Б РЕКЕ ЬЮАКНМЮ.
(?:ЬЮАКНМ) - ЦПСООХПНБЙЮ ЙЮЙ Х '( )', МН АЕГ НАПЮРМНИ ЯЯШКЙХ
(?=ЬЮАКНМ) - "ГЮЦКЪДШБЮМХЕ" БОЕПЕД. мЮОПХЛЕП /\w+(?=\t)/ ЯННРБЕРЯРБСЕР ЯКНБС, ГЮ ЙНРНПШЛ ХДЕР РЮАСКЪЖХЪ, МН ЯХЛБНК '\t' МЕ БЙКЧВЮЕРЯЪ Б ПЕГСКЭРЮР.

оПХЛЕП:


$s = "1+2-3*4";
if ($s =~ /(\d)(?=-)/)  # мЮИРХ ЖХТПС ГЮ ЙНРНПНИ ЯРНХР '-'
    {
        print "$1\n";   # пЕГСКЭРЮР '2'
   }
else { print "НЬХАЙЮ ОНХЯЙЮ\n";}


        (?!ЬЮАКНМ)         - "ГЮЦКЪДШБЮМХЕ" БОЕПЕД ОН НРПХЖЮМХЧ.

оПХЛЕП:


$s = "1+2-3*4";
if ($s =~ /(\d)(?!\+)/) # мЮИРХ ЖХТПС ГЮ ЙНРНПНИ МЕ ЯРНХР '+'
    {
        print "$1\n";   # пЕГСКЭРЮР '2'
   }
else { print "НЬХАЙЮ ОНХЯЙЮ\n";}

(?ismx)- "БМСРПЕММХЕ" ЛНДХТХЙЮРНПШ. сДНАМН ОПХЛЕМЪРЭ Б ЬЮАКНМЮУ, ЦДЕ МЮОПХЛЕП МСФМН БМСРПХ ЬЮАКНМЮ СЙЮГЮРЭ ЛНДХТХЙЮРНП.

оПЮБХКЮ ПЕЦСКЪПМНЦН БШПЮФЕМХЪ. (regex)

  1. кЧАНИ ЯХЛБНК НАНГМЮВЮЕР ЯЕАЪ ЯЮЛНЦН, ЕЯКХ ЩРН МЕ ЛЕРЮЯХЛБНК. еЯКХ БЮЛ МСФМН НРЛЕМХРЭ ДЕИЯРБХЕ ЛЕРЮЯХЛБНКЮ, РН ОНЯРЮБЭРЕ ОЕПЕД МХЛ '\'.
  2. яРПНЙЮ ЯХЛБНКНБ НАНГМЮВЮЕР ЯРПНЙС ЩРХУ ЯХЛБНКНБ.
  3. лМНФЕЯРБН БНГЛНФМШУ ЯХЛБНКНБ (ЙКЮЯЯ) ГЮЙКЧВЮЕРЯЪ Б ЙБЮДПЮРМШЕ ЯЙНАЙХ '[]', ЩРН ГМЮВХР, ВРН Б ДЮММНЛ ЛЕЯРЕ ЛНФЕР ЯРНЪРЭ НДХМ ХГ СЙЮГЮММШУ Б ЯЙНАЙЮУ ЯХЛБНКНБ. еЯКХ ОЕПБШИ ЯХЛБНК Б ЯЙНАЙЮУ ЩРН '^' - ГМЮВХР МХ НДХМ ХГ СЙЮГЮММШУ ЯХЛБНКНБ МЕ ЛНФЕР ЯРНЪРЭ Б ДЮММНЛ ЛЕЯРЕ БШПЮФЕМХЪ. бМСРПХ ЙКЮЯЯЮ ЛНФМН СОНРПЕАКЪРЭ ЯХЛБНК '-', НАНГМЮВЮЧЫХИ ДХЮОЮГНМ ЯХЛБНКНБ. мЮОПХЛЕП, a-z - НДХМ ХГ ЛЮКШУ АСЙБ КЮРХМЯЙНЦН ЮКТЮБХРЮ, 0-9 - ЖХТПЮ Х Р.Д.
  4. бЯЕ ЯХЛБНКШ, БЙКЧВЮЪ ЯОЕЖХЮКЭМШЕ, ЛНФМН НАНГМЮВЮРЭ Я ОНЛНЫЭЧ '\' ЙЮЙ Б ЪГШЙЕ я.
  5. юКЭРЕПМЮРХБМШЕ ОНЯКЕДНБЮРЕКЭМНЯРХ ПЮГДЕКЪЧРЯЪ ЯХЛБНКНЛ '|' гЮЛЕРЭРЕ ВРН БМСРПХ ЙБЮДПЮРМШУ ЯЙНАНЙ ЩРН НАШВМШИ ЯХЛБНК.
  6. бМСРПХ ПЕЦСКЪПМНЦН БШПЮФЕМХЪ ЛНФМН СЙЮГШБЮРЭ "ОНДЬЮАКНМШ" ГЮЙКЧВЮЪ ХУ Б ЙПСЦКШЕ ЯЙНАЙХ Х ЯЯШКЮРЭЯЪ МЮ МХУ ЙЮЙ '\МНЛЕП' оЕПБЮЪ ЯЙНАЙЮ НАНГМЮВЮЕРЯЪ ЙЮЙ '\1'.

[мЮГЮД] [яНДЕПФЮМХЕ] [бОЕПЕД]