Ocenite etot tekst:


V dannoj glave opisyvaetsya sintaksis regulyarnyh vyrazhenij. CHashche vsego
v Pel oni ispol'zuyustya v operatorah poiska i zameny takih kak s//
m/ operatorah svyazki =~ ili != i t.d.
Kak pravilo vse eti operatory imeyut shozhie opcii takie kak:

	i	- ne razlichat' strochnye i zaglavnye bukvy.
	m	- schitat' stroku mnogostrochnoj.
	s	- odnostrochnaya stroka.
	x	- rasshirennyj sintaksis ( ispol'zovanie probelov i kommentariev)

Obychno vse eti opcii oboznachayut kak '/x'. Ih mozhno ispol'zovat' dazhe
vnutri shablonov, ispol'zuya novuyu konstrukciyu (?...)

Regulyarnye vyrazheniya ili shablony (pattern) to zhe samoe chto i regexp
procedury v YUnikse. Vyrazheniya i sintaksis zaimstvovan iz svobodno
rasprostranyaemyh procedur V8 Genri Spensera (Henry Spencer) tam zhe
oni podrobno i opisany.

V shablonah ispol'zuyutsya sleduyushchie metasimvoly (simvoly oboznachayushchie
gruppy drugih simvolov) chasto nazyvaemyh egrep - standartom:

	\	- schitat' sleduyushchij metasimvol kak obychnyj simvol.
	^	- nachalo stroki
	.	- odin proizvol'nyj simvol. Krome '\n' - konec stroki.
	$	- konec stroki
	|	- al'ternativa (ili)
	()	- gruppirovka
	[]	- klass simvolov

Metasimvoly imeyut modifikatory (pishutsya posle metasimvola):

	*	- povtoryaetsya 0 ili bol'shee chislo raz
	+	- povtoryaetsya 1 ili bol'shee chislo raz
	?	- 1 ili 0 raz
	{n}	- tochno n raz
	{n,}	- po men'shej mere raz
	{n,m}	- ne menshe n, no i ne bol'she m

Vo vse drugih sluchayah figurnye skobki schitayutsya obychnymi (regulyarnymi)
simvolami. Takim obrazom '*' ekvivalentna {0,} , '+' - {1,}
i '?' - {0,1}. n i m ne mogut byt' bol'she 65536.

Po umolchaniyu dejstvie metasimvolov "zhadno" (greedy). Sovpadenie
rasprostranyaetsya stol'ko raz skol'ko vozmozhno ne uchityvaya rezul'tat
dejstviya sleduyuyushchih metasimvolov. Esli vy hotite "umen'shit' ih appetit"
to ispol'zujte simvol '?'. |to ne izmenyaet znachenie metasimvolov
prosto umen'shaet rasprostranenie. Takim obrazom:

	*?	- stanet 0 i bolee
	+?	- 1 i bolee
	??	- 0 ili 1 raz
	{n}?	- tochno n raz
	{n,}?	- ne men'she n raz
	{n,m}?	- bol'she ili ravno n i men'she m raz

SHablony rabotayut tak zhe kak i dvojnye kavychki poetomu v nih mozhno
ispol'zovat' `\` - simvoly (bakslesh-simvoly):

	\t	- simvol tabulyacii
	\n	- novaya stroka
	\r	- perevod karetki
	\A	- perevol formata
	\v	- vertikal'naya tabulyaciya
	\a	- zvonok
	\e	- escape
	\033	- vos'merichnaya zapis' simvola
	\x1A	- shestnadcaterichnaya
	\c[	- control simvol
	\l	- nizhnij registr sleduyushchego simvola
	\u	- verhnij registr -//-
	\L	- vse simvoly v nizhnem registre do \E
	\U	- v verhnem -//-
	\E	- ogranichitel' smeny registra
	\Q	- otmena dejstviya kak metasimvola

Dopolnitel'no v Pel dobavleny sleduyushchie metasimvoly:

	\w	- alfavitno-cifrovoj ili '_' simvol
	\W	- ne alfavitno-cifrovoj ili '_' simvol
	\s	- odin probel
	\S	- odin ne probel
	\d	- odna cifra
	\D	- odna ne cifra

Obratite vnimanie chto vse eto "odin" simvol. Dlya oboznacheniya posledovatel'nosti
primenyajte modifikatory. Tak:

	\w+	- slovo
	\d+	- celoe chislo
	[+-]?\d+	- celoe so znakom
	[+-]?\d+\.?\d*	- chislo s tochkoj

Krome togo sushchestvuyut mnimye metasimvoly. Oboznachayushchie ne sushchestvuyushchie
simvoly v meste smeny znacheniya. Takie kak:

	\b	- granica slova
	\B	- ne granica slova
	\A	- nachalo stroki
	\Z	- konec stroki
	\G	- konec dejstviya m//g

Granica slova (\b) - eto mnimaya tochka mezhdu simvolami \w i \W.
Vnutri klassa simvolov '\b' oboznachaet simvol backspace (stiraniya).
Metasimvoly \A i \Z - analogichny '^' i '$' no esli nachalostroki '^'
i konec stroki '$' dejstvuyut dlya kazhdoj stroki v mnogostorochnoj stroke
to \A i \Z oboznachayut nachalo i konec vsej mnogostorchnoj stroki.

Esli vnutri shablona primenyaetsya gruppirovka (kruglye skobki)
to nomer podstroki gruppy oboznachaetsya kak '\cifra'.
Zamet'te chto za shablonom v predelah vyrazheniya ili bloka eti gruppy oboznachayutsya
kak '$cifra'. Krome etogo sushchestvuyut dopolnitel'nye peremennye:

	$+	- oboznachaet poslednee sovpadenie
	$&	- vse sovpadenie
	$`	- vse do sovpadeniya
	$'	- vse posle sovpadeniya

Primer:

$s = "Odin 1 dva 2 i tri 3";
if ($s =~ /(\d+)\D+(\d+)/)
    {
        print "$1\n";	# Rezul'tat '1'
        print "$2\n";	# '2'
        print "$+\n";	# '2'
        print "$&\n";	# '1 dva 2'
        print "$`\n";	# 'Odin '
        print "$'\n";	# ' i tri 3'
   }




(?#kommentarij)	- kommentarij v tele shablona.

	(?:shablon)	- gruppirovka kak i '( )' no bez obratnoj ssylki

	(?=shablon)	- "zaglyadyvanie" vpered. Naprimer /\w+(?=\t)/
			sootvetstvuet slovu za kotorym idet tabulyaciya
no simvol '\t' ne vklyuchaetsya v rezul'tat.

Primer:
$s = "1+2-3*4";
if ($s =~ /(\d)(?=-)/)  # Naiti cifru za kotoroj stoit '-'
    {
        print "$1\n";   # Rezul'tat '2'
   }
else { print "oshibka poiska\n";}


	(?!shablon)	- "zaglyadyvanie" vpered po otricaniyu.

Primer:
$s = "1+2-3*4";
if ($s =~ /(\d)(?!\+)/) # Naiti cifru za kotoroj ne stoit '+'
    {
        print "$1\n";   # Rezul'tat '2'
   }
else { print "oshibka poiska\n";}


	(?ismx)	- "vnutrennie" modifikatory. Udobno primenyat' v shablonah
	gde naprimer nuzhno vnutri shablona ukazat' modifikator.




	1. Lyuboj simvol oboznachaet sebya samogo esli eto ne metasimvol.
	Esli vam nuzhno otmenit' dejstvie metasimvola to postav'te
	pered nim '\'.
	2. Stroka simvolov oboznachaet stroku etih simvolov.

	3. Mnozhestvo vozmozhnyh simvolov (klass) zaklyuchaetsya v kvadratnye
	skobki '[]' eto znachit chto v dannom meste mozhet stoyat' odin
	iz ukazannyh v skobkah simvol. Esli pervyj simvol v skobkah
	eto '^' - znachit ne odin iz ukazannyh simvolov ne mozhet
	stoyat' v dannom meste vyrazheniya. Vnutri klassa mozhno upotreblyat'
	simvol '-' oboznachayushchij diappazon simvolov. Naprimer a-z
	odin iz malyh bukv latinskogo alfavita, 0-9 - cifra i t.d.

	4. Vse simvoly, vklyuchaya special'nye mozhno oboznachat' s
	pomoshch'yu '\' kak v yazyke S.

	5. Al'ternativnye posledovatel'nosti razdelyayutsya simvolom '|'
	Zamet'te chto vnutri kvadratnyh skobok eto obychnyj simvol.

	6. Vnutri regulyarnogo vyrazheniya mozhno ukazyvat "podshablony"
	zaklyuchaya ih v kruglye skobki i ssylat'sya na nih kak '\nomer'
	Pervaya skobka oboznachaetsya kak '\1'.


Last-modified: Sat, 08 Aug 1998 05:51:08 GMT
Ocenite etot tekst: