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

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

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

flags – Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎ, ΠΊΠ°ΠΊ упорядочСны Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска.


Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ поиск ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, сколько Ρ€Π°Π· ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ совпадСниС. Для preg_match() это 0 (Π½Π΅Ρ‚ совпадСний) ΠΈΠ»ΠΈ 1, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ поиск прСкращаСтся, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ совпадСниС. Ѐункция preg_match_all() ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ поиск Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° строки ΠΈ поэтому Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ всС совпадСния. ВсС Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ совпадСния содСрТатся Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ элСмСнтС массива result Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (для preg_match_all() этот элСмСнт – Ρ‚ΠΎΠΆΠ΅ массив).


ΠŸΡ€ΠΎ Β«Π·Π°Ρ…Π²Π°Ρ‚Β» элСмСнтов Π±ΡƒΠ΄Π΅Ρ‚ рассказано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅, посвящСнном подвыраТСниям.


Аналогом preg_match являСтся Π±ΡƒΠ»Π΅Π²Π° функция POSIX-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ereg(string pattern, string string [, array regs])


Ѐункция ereg() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ TRUE, Ссли совпадСниС Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, ΠΈ FALSE – Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.


ΠŸΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° пСрСчислСнных функциях. НапримСр, Ρ‚Π°ΠΊ:


<?

//строка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π°ΠΉΡ‚ΠΈ

$str = "Мой Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€: ".

"33-22-44. НомСр ΠΌΠΎΠ΅Π³ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°: ".

"222-44-55 ΠΈ 323-22-33";

//шаблон, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΈΡΠΊΠ°Ρ‚ΡŒ.

//Π—Π°Π΄Π°Π΅Ρ‚ поиск сСмизначных Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ².

$pattern = "/\d{3}-\d{2}-\d{2}/m";

//функция, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰Π°Ρ поиск

$num_match = preg_match_all ($pattern,

$str, $result);

//Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² поиска

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

echo "Π‘ΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ $i: ".

$result[0][$i]."<br>";

?>


Бинтаксис рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ


Π‘Ρ‚Ρ€ΠΎΠ³ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ рСгулярного выраТСния выглядит довольно Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ. НачнСм с Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ описания.


РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ прСдставляСт собой строку. Π­Ρ‚Π° строка состоит ΠΈΠ· собствСнно рСгулярного выраТСния (шаблона), Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ символа раздСлитСля (это ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ символы Β«/Β» , Β«|Β», Β«{Β«, Β«!Β» ΠΈ Ρ‚.ΠΏ ) ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, Π²Π»ΠΈΡΡŽΡ‰Π΅Π³ΠΎ Π½Π° способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π Π’.


Π’ дальнСйшСм это описаниС Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΎ.


НапримСр, Π² рСгулярном Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ /\d{3}-\d{2}-\d{2}/m символ Β«/»являСтся Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ, \d{3}-\d{2}-\d{2} – нСпосрСдствСнно рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (шаблон), Π° m – ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.


ΠœΠΎΡ‰ΡŒ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π° Π² основС своСй ΠΈΡ… ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² шаблон Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΈ повторСния. Они ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² шаблонС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ мСтасимволов. ΠœΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ» отличаСтся ΠΎΡ‚ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ символа Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.


Одним ΠΈΠ· основных мСтасимволов являСтся ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш Β«\Β». Он мСняСт Ρ‚ΠΈΠΏ символа, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° Π½ΠΈΠΌ, Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ, Ρ‚.Π΅. Ссли это Π±Ρ‹Π» ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ символ, Ρ‚ΠΎ ΠΎΠ½ ΠœΠžΠ–Π•Π’ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² мСтасимвол, Ссли это Π±Ρ‹Π» мСтасимвол, Ρ‚ΠΎ ΠΎΠ½ тСряСт своС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ становится ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ символом (это Π½ΡƒΠΆΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π² тСкст ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅). НапримСр, символ d Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½ΠΎ \d Π΅ΡΡ‚ΡŒ мСтасимвол, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ «любая Ρ†ΠΈΡ„Ρ€Π°Β». Π‘ΠΈΠΌΠ²ΠΎΠ» Β«.Β» Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «любой Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ символ», Π° Β«\.Β» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ просто Ρ‚ΠΎΡ‡ΠΊΡƒ.


Π”Ρ€ΡƒΠ³ΠΎΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ слэша – ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹Ρ… символов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ :


\n – cΠΈΠΌΠ²ΠΎΠ» ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки;


\e – символ escape;


\t – cΠΈΠΌΠ²ΠΎΠ» табуляции;


\xhh – символ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ \x41 Π΅ΡΡ‚ΡŒ Π±ΡƒΠΊΠ²Π° A ΠΈ Ρ‚.Π΄.


Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ слэша – ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ:


\d – любая дСсятичная Ρ†ΠΈΡ„Ρ€Π° (0-9);


\D – любой символ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ дСсятичной Ρ†ΠΈΡ„Ρ€ΠΎΠΉ;


\s – любой пустой символ (ΠΏΡ€ΠΎΠ±Π΅Π» ΠΈΠ»ΠΈ табуляция);


\S – любой символ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ пустым;


\w – символ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для написания Perl-слов (это Π±ΡƒΠΊΠ²Ρ‹, Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈ символ подчСркивания), Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ «словарный символ»;


\W – нСсловарный символ (всС символы, ΠΊΡ€ΠΎΠΌΠ΅ опрСдСляСмых \w).


Π§Ρ‚ΠΎ имССтся Π² Π²ΠΈΠ΄Ρƒ ΠΏΠΎΠ΄ Β«ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌΒ»? ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ мСтасимвол ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΎΠ΄Π½ΠΎ) ΠΈΠ· класса Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… автоматичСски ΠΈΠ»ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом ΠΏΠΎΠ·ΠΆΠ΅). Π’Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ языком программирования.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ мСтасимволов:


/\d\d\d plus \d is \w\w\w/


Π­Ρ‚ΠΎ Π Π’ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚: Ρ‚Ρ€Π΅Ρ…Π·Π½Π°Ρ‡Π½ΠΎΠ΅ число, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт подстрока plus, любая Ρ†ΠΈΡ„Ρ€Π°, Π·Π°Ρ‚Π΅ΠΌ is ΠΈ слово ΠΈΠ· Ρ‚Ρ€Π΅Ρ… словарных символов. Π’ частности, Π΄Π°Π½Π½ΠΎΠΌΡƒ Π Π’ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ строки: Β«123 plus 3 is sumΒ», Β«213 plus 4 is 217Β».


Π’ΠΎΠΎΠ±Ρ‰Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ Π΄Π²Π° мноТСства мСтасимволов: Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ Π² любом мСстС шаблона, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ внутрСнности ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок, ΠΈ Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок.


ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки [ ] ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для описания подмноТСств ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ рСгулярного выраТСния Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ символ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния, пСрСчислСнныС Π²Π½ΡƒΡ‚Ρ€ΠΈ этих скобок. Однако Ссли ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ символом Π²Π½ΡƒΡ‚Ρ€ΠΈ скобок являСтся ^, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ символьного класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ символы, НЕ пСрСчислСнныС Π²Π½ΡƒΡ‚Ρ€ΠΈ скобок.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:


- Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс [Π°Π±Π²Π³Π΄] Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· символов Π°, Π±, Π², Π³, Π΄, Π° класс [^Π°Π±Π²Π³Π΄] Π·Π°Π΄Π°Π΅Ρ‚ любой символ, ΠΊΡ€ΠΎΠΌΠ΅ Π°, Π±, Π², Π³, Π΄.


- Если Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ [2Π±ΡƒΠ»]ΠΊΠΈ], Ρ‚ΠΎ это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ интСрпрСтируСтся ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· символов 2, Π±, Ρƒ, Π», Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт строка ΠΊΠΈ], ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ пСрвая Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ²ΡˆΠ°ΡΡΡ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ квадратная скобка (Ρ€Π°Π·Π±ΠΎΡ€ происходит слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ) Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ символьного класса. Π’ΠΎ Π΅ΡΡ‚ΡŒ это Π Π’ совпадСт с ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· строк 2ΠΊΠΈ], Π±ΠΊΠΈ], ΡƒΠΊΠΈ] ΠΈΠ»ΠΈ Π»ΠΊΠΈ].


- Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π Π’ [0-9А-Π―Π°-я] ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€Ρƒ.


ΠœΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹, распознаваСмыС Π²Π½Π΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ искомого тСкста Π² строкС, связанныС с подвыраТСниями, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс, ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈ пСрСчислСниС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ².


ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ (^ ΠΈ $)


$str = "11 aaa bbb ".

"ccc 22 ddd ".

"eee ggg 33";


\


ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½Ρ‹ΠΉ символ со мноТСством Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ


^


ΠžΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅ класса, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«^\dΒ» Π·Π°Π΄Π°Π΅Ρ‚ всС, ΠΊΡ€ΠΎΠΌΠ΅ Ρ†ΠΈΡ„Ρ€)


-


Π—Π°Π΄Π°Π΅Ρ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«0-9Β» Π·Π°Π΄Π°Π΅Ρ‚ всС Ρ†ΠΈΡ„Ρ€Ρ‹, Β«A-ZΒ» – всС латинскиС Π±ΡƒΠΊΠ²Ρ‹)


]


ВычисляСт ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс


РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ /\d\d/m ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сопоставлСно ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ подстрокам: 11, 22, 33. Если Π² Π½Π°Ρ‡Π°Π»Π΅ Π Π’ стоит ^, Ρ‚ΠΎ совпадСния ищутся Π² Π½Π°Ρ‡Π°Π»Π΅ строки, поэтому Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ /^\d\d/m Π½Π°ΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 11.


Когда Π² ΠΊΠΎΠ½Ρ†Π΅ Π Π’ стоит Π·Π½Π°ΠΊ Π΄ΠΎΠ»Π»Π°Ρ€Π° $, поиск производится Π² ΠΊΠΎΠ½Ρ†Π΅ строки, поэтому Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ /\d\d$/m Π½Π°ΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 33.


Π¨Π°Π±Π»ΠΎΠ½Ρƒ ΠΆΠ΅ /^\d\d\d$/ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ строка, Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ состоящая ΠΈΠ· Ρ‚Ρ€Π΅Ρ…Π·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ числа (Ρ‚.Π΅. ΠΎΠ½Π° ΠΈ начинаСтся ΠΈ заканчиваСтся этим числом).


-


<?

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

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

$pattern = "!^<[^/]+>!mU";

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

$n = preg_match_all ($pattern,

$str, $res);

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

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

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

"<br>";

?>


\


ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½Ρ‹ΠΉ символ со мноТСством Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ


^


ΠžΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΈΠ»ΠΈ строки Π² многострочном Ρ€Π΅ΠΆΠΈΠΌΠ΅). Π’ΠΎ Π΅ΡΡ‚ΡŒ этот символ опрСдСляСт, Ρ‡Ρ‚ΠΎ искомый тСкст Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ строки. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°: Β«\AΒ»


$


ΠžΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ† ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΈΠ»ΠΈ строки Π² многострочном Ρ€Π΅ΠΆΠΈΠΌΠ΅). Π’ΠΎ Π΅ΡΡ‚ΡŒ этот символ опрСдСляСт, Ρ‡Ρ‚ΠΎ искомый тСкст Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Ρ†Π΅ строки. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹: Β«\ZΒ», Β«\zΒ»


.


Π‘ΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ‚ с Π»ΡŽΠ±Ρ‹ΠΌ символом, ΠΊΡ€ΠΎΠΌΠ΅ символа ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)


[


НачинаСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ символьного класса


]


Π—Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ символьного класса


|


РаздСляСт пСрСчислСниС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²


(


НачинаСт подшаблон рСгулярноС (ΠΏΠΎΠ΄Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅)


)


Π—Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ подшаблон


?


Π Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«(Β», ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² 0 ΠΈΠ»ΠΈ 1, ΠΈ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ


*


0 ΠΈΠ»ΠΈ большС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ (ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€)


+


1 ΠΈΠ»ΠΈ большС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ (ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€)


{


НачинаСт ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ/ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€


}


Π—Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ/ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€


Π¨Π°Π±Π»ΠΎΠ½ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π·Π½Π°ΠΊΠ°ΠΌΠΈ. ΠŸΠ΅Ρ€Π²Π°Ρ Β«^Β» Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ совпадСния Π² Π½Π°Ρ‡Π°Π»Π΅ строк, ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΠ΄Π΅Ρ‚ символ Β«<Β» – Π΅Π³ΠΎ ΠΈ ΠΈΡ‰Π΅ΠΌ Π² строкС, послС Π½Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ΄Ρ‚ΠΈ всС, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ слэша (конструкция Β«[^\]Β» ), Β«+Β» Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ стоящий ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ символ повторяСтся ΠΎΠ΄ΠΈΠ½ ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π· ΠΈ заканчиваСтся всС это символом Β«>Β». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ всС Ρ‚Π΅Π³ΠΈ Π² Π½Π°Ρ‡Π°Π»Π΅ строк.