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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠšΡƒΡ€Ρ "Π―Π·Ρ‹ΠΊ программирования PHP"Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 41

Автор Нина БавСльСва

-


<?

//считываСм Ρ„Π°ΠΉΠ» Π² строку

$str = file_get_contents('1.htm');

$pattern = "!\s[А-Яа-я]+".

"\s([А-Я]\.\s*)([А-Я]\.\s*)$!m";

// шаблон ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒ-

// Π½Ρ‹ΠΌΠΈ Π·Π½Π°ΠΊΠ°ΠΌΠΈ, m – ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€,

// Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ многострочный Ρ€Π΅ΠΆΠΈΠΌ

// ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ \s ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄

// Ρ„Π°ΠΌΠΈΠ»ΠΈΠ΅ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ΄Ρ‚ΠΈ пустой

// символ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ±Π΅Π»)

// [А-Π―Π°-я] Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π±ΡƒΠΊΠ²

// Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° Π² любом рСгистрС,Π° Π²

// ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ со Π·Π½Π°ΠΊΠΎΠΌ плюс

// опрСдСляСт,Ρ‡Ρ‚ΠΎ эта Π±ΡƒΠΊΠ²Π°

// повторяСтся ΠΎΠ΄ΠΈΠ½ ΠΈ Π±ΠΎΠ»Π΅Π΅

// Ρ€Π°Π· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ \s ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ

// ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΌΠΈΠ»ΠΈΠ΅ΠΉ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»Π°ΠΌΠΈ

// Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»

// Π”Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅,

// ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»Ρ‹.

// Π­Ρ‚ΠΎ Π±ΡƒΠΊΠ²Π° ΠΎΡ‚ А Π΄ΠΎ Π―, послС

// ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стоит Ρ‚ΠΎΡ‡ΠΊΠ° ('\.')

// Π­ΠΊΡ€Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹

// ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π΅Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ

// значСния. ПослС Π±ΡƒΠΊΠ²Ρ‹ с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ

// ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ΄Ρ‚ΠΈ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠ΄Ρ‚ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»

// ΠΈΠ»ΠΈ нСсколько. Вся конструкция

// повторяСтся ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄Π²Π° Ρ€Π°Π·Π°.

// ПослСдний символ $ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚,

// Ρ‡Ρ‚ΠΎ фамилия с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»Π°ΠΌΠΈ

// Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Ρ†Π΅

// строки.

//осущСствляСм поиск

$n = preg_match_all ($pattern,

$str, $res);

// Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

for ($i=0;$i<$n;$i++)

echo htmlspecialchars($res[0][$i]).

"<br>";

?>


ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ( | ΠΈ .)


- ΠŸΡƒΡΡ‚ΡŒ имССтся Π½Π΅ΠΊΠΈΠΉ тСкст. Нам Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ всСх упомянутых Π² Π½Π΅ΠΌ людСй со званиями.


<?

$str = "Π”ΠΎΡ†Π΅Π½Ρ‚ Π‘ΠΌΠΈΡ€Π½ΠΎΠ² ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΠ»".

"ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅. Π•Π³ΠΎ ΡƒΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΌ Π±Ρ‹Π»Π° ".

"профСссор Иванова. ".

"Π­Ρ‚ΠΈΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ Π‘ΠΌΠΈΡ€Π½ΠΎΠ² ".

"Π·Π°Π²ΠΎΠ΅Π²Π°Π» сСбС ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ".

"Π΄ΠΎΠΊΡ‚ΠΎΡ€Π°. РаньшС ΠΎΠ½ Π±Ρ‹Π» ".

"Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚.";

$pattern = "/(профСссор|Π΄ΠΎΡ†Π΅Π½Ρ‚)".

"\s[А-Яа-я]+(\s|\.)/i";

// осущСствляСм поиск

$n = preg_match_all ($pattern, $str,

$res);

// Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

for ($i=0;$i<$n;$i++)

echo htmlspecialchars($res[0][$i]).

"<br>";

?>


ΠœΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ» прямая Ρ‡Π΅Ρ€Ρ‚Π° Β« | Β» позволяСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π½Π°ΠΉΡ‚ΠΈ всСх профСссоров ΠΈΠ»ΠΈ Π΄ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ². Для этого Π±Ρ‹Π»ΠΎ создано ΠΏΠΎΠ΄Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Β«(профСссор|Π΄ΠΎΡ†Π΅Π½Ρ‚)Β». ПослС звания Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π» фамилия Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ΠΎ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚, – для этого сущСствуСт комбинация Β«\s[А-Π―Π°-я]+Β». ПослС Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ ΠΈΠ΄Π΅Ρ‚ Π»ΠΈΠ±ΠΎ ΠΎΠΏΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π», Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°, Ссли это ΠΊΠΎΠ½Π΅Ρ† прСдлоТСния. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠΏΡΡ‚ΡŒ Π΄Π²Π° Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°: Β«(\s|\.)Β» (здСсь Ρ‚ΠΎΡ‡ΠΊΠ° экранируСтся ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ слэшСм, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° понималась ΠΊΠ°ΠΊ обычная Ρ‚ΠΎΡ‡ΠΊΠ°, Π±Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния).


ΠŸΠΎΠ΄Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡ (ΠΏΠΎΠ΄ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹)


Π’ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΌΡ‹ ΡƒΠΆΠ΅ использовали подвыраТСния. Настало врСмя Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ это Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ ΠΊΠ°ΠΊΠΈΠΌΠΈ свойствами ΠΎΠ½ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚


Π’ Π Π’ ΠΏΠΎΠ΄ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки. Для ΠΈΡ… обозначСния ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° «подшаблон» Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Β«ΠΏΠΎΠ΄Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Β». ΠŸΠΎΠ΄ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ части рСгулярного выраТСния Π² Π²ΠΈΠ΄Π΅ рСгулярного подвыраТСния Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.


НапримСр, шаблон


ΠΆΠ°Ρ€(ΠΊΠΎΠ΅|ΠΏΡ‚ΠΈΡ†Π°|)


- совпадаСт с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· слов Β«ΠΆΠ°Ρ€ΠΊΠΎΠ΅Β», Β«ΠΆΠ°Ρ€ΠΏΡ‚ΠΈΡ†Π°Β» ΠΈ Β«ΠΆΠ°Ρ€Β». Π’ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π±Π΅Π· скобок это Π±Ρ‹Π»ΠΎ Π±Ρ‹ Β«ΠΆΠ°Ρ€ΠΊΠΎΠ΅Β», Β«ΠΏΡ‚ΠΈΡ†Π°Β» ΠΈ пустая строка.


НапримСр, имССтся Ρ‚Π°ΠΊΠΎΠΉ шаблон:


ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚

((Π·ΠΎΠ»ΠΎΡ‚ΡƒΡŽ|ΠΏΠΎΠ·ΠΎΠ»ΠΎΡ‡Π΅Π½Π½Ρ‹ΠΉ)

(мСдаль|ΠΊΡƒΠ±ΠΎΠΊ))


- ΠΈ строка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ищутся совпадСния с этим шаблоном: Β«ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π·ΠΎΠ»ΠΎΡ‚ΡƒΡŽ мСдаль». Π’ΠΎΠ³Π΄Π° ΠΊΡ€ΠΎΠΌΠ΅ этой Ρ„Ρ€Π°Π·Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π΅Ρ‰Π΅ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Ρ‹ ΠΈ Π²Ρ‹Π΄Π°Π½Ρ‹ ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ совпадСния Π² подвыраТСниях: Β«Π·ΠΎΠ»ΠΎΡ‚ΡƒΡŽ мСдаль», Β«Π·ΠΎΠ»ΠΎΡ‚ΡƒΡŽΒ», «мСдаль», ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ 1, 2, 3 соотвСтствСнно.


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


ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚

((?:Π·ΠΎΠ»ΠΎΡ‚ΡƒΡŽ|ΠΏΠΎΠ·ΠΎΠ»ΠΎΡ‡Π΅Π½Π½Ρ‹ΠΉ)


(мСдаль|ΠΊΡƒΠ±ΠΎΠΊ))


Π’ΠΎΠ³Π΄Π° Π² условиях ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΈΡΠΊΠΎΠΌΡƒΡŽ строку Β«ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π·ΠΎΠ»ΠΎΡ‚ΡƒΡŽ мСдаль» ΠΈ строки Β«Π·ΠΎΠ»ΠΎΡ‚ΡƒΡŽ мСдаль», «мСдаль», ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ 1 ΠΈ 2 соотвСтствСнно.


Если Π² html-Ρ„Π°ΠΉΠ»Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ находится послС <body> ΠΈ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΡ‚ Π½Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌΠΈ строк, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² Ρ‚Π΅Π³ <h1> ΠΈ послС Π½Π΅Π³ΠΎ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ΄Ρ‚ΠΈ сколько-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² строк, Ρ‚ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ скрипта:


<?

//считываСм Ρ„Π°ΠΉΠ» Π² строку

$str = file_get_contents('1.htm');

$pattern = "/<body.*?>[\n\s]*<h1>".

"(.*?)<\/h1>[\n\s]*/m";

// осущСствляСм поиск

$n = preg_match_all ($pattern, $str, $res);

echo $res[1][0]; // Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ

?>


Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ здСсь выводится ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ΄Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°ΠΌ интСрСсно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ само Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π° Π½Π΅ всС Π Π’. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² этом Π Π’ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ΄Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ содСрТится Π² Π½ΡƒΠ»Π΅Π²ΠΎΠΌ элСмСнтС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ массива Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².


ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΡ (ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹)


Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΌΡ‹ часто писали ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° \d\d. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ†ΠΈΡ„Ρ€Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ Π΄Π²Π° Ρ€Π°Π·Π°. А Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, сколько ΠΈΠΌΠ΅Π½Π½ΠΎ? ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ мСтасимволы.


ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΡ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² (мСтасимволов, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΡ… количСствСнныС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ). БущСствуСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²: ΠΎΠ±Ρ‰ΠΈΠ΅ (Π·Π°Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок) ΠΈ сокращСнныС (это историчСски слоТившиСся сокращСния Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²).


ΠšΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° Π»ΡŽΠ±Ρ‹ΠΌ ΠΈΠ· пСрСчислСнных элСмСнтов:


- ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ символ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ слэшСм);


- мСтасимвол Β«Ρ‚ΠΎΡ‡ΠΊΠ°Β»;


- ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс;


- обратная ссылка (ΠΎ Π½ΠΈΡ… расскаТСм ΠΏΠΎΠ·Π΄Π½Π΅Π΅);


- подшаблон.


ΠžΠ±Ρ‰ΠΈΠ΅ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ минимальноС ΠΈ максимальноС число Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ элСмСнта; эти Π΄Π²Π° числа, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ запятой, Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки. Числа Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ 65 536 ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ. НапримСр,


x{1,3}


Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ символ Β«xΒ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½, Π° максимум Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π°. БоотвСтствСнно этому ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ строки: x, xx, xxx.


Если Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ отсутствуСт, Π½ΠΎ запятая Π΅ΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ,


[aeuoi]{2,}


Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ любой ΠΈΠ· символов Β«aΒ», Β«eΒ», Β«uΒ», Β«oΒ», Β«iΒ» Π² строкС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ Π΄Π²Π° ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·, Π° рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅


\d{3}


Π·Π°Π΄Π°Π΅Ρ‚ Ρ€ΠΎΠ²Π½ΠΎ Ρ‚Ρ€ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹.


Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ количСствСнныС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (повторСния). Они ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Ρ‹ для удобства, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈ Π±Π΅Π· Ρ‚ΠΎΠ³ΠΎ слоТныС выраТСния лишним синтаксисом.


Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· историчСских Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΉ Ρ‚Ρ€ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ обозначСния:


* эквивалСнтно {0,} – Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ это ноль ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ;


+ эквивалСнтно {1,} – Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ это ΠΎΠ΄Π½ΠΎ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ;


? эквивалСнтно {0,1} – Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ это ноль ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅.


Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Β«ΠΆΠ°Π΄Π½Ρ‹Π΅Β», ΠΎΠ½ΠΈ ΡΡ‚Π°Ρ€Π°ΡŽΡ‚ΡΡ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ элСмСнта. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ символ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π· (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ *), совпадСниС ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ со строкой, содСрТащСй наибольшСС число ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ символа. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° языкС CΠΈ ΠΈΠ»ΠΈ PHP. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² CΠΈ ΠΈ PHP Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ символами /* ΠΈ */, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ символы * ΠΈ /. И ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Π‘ΠΈ-ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ шаблона


/\* .* \*/


Π² строкС


/* ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ */

Π½Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ


/* Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ */


Π½Π΅ увСнчаСтся успСхом ΠΈΠ·-Π·Π° «Тадности» элСмСнта Β«.*Β» (Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½Π° Ρ‚Π°ΠΊΠΆΠ΅ строка Β«Π½Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉΒ»).


Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π½Π°ΠΊ вопроса послС ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. Π’ΠΎΠ³Π΄Π° ΠΎΠ½ пСрСстанСт Π±Ρ‹Ρ‚ΡŒ Β«ΠΆΠ°Π΄Π½Ρ‹ΠΌΒ» ΠΈ попытаСтся Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшСС число ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ элСмСнта, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ (ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ примСняСтся ΠΊ элСмСнту, Ρ‡Ρ‚ΠΎ стоит ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ). Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ шаблон