с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ

Π¨ΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° ΠΏΠΎ рСгулярным выраТСниям

ΠšΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹

ΠΠ½Π°Π»ΠΎΠ³ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
?a?ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ ноль Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Β«Π°Β»
+a+ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Β«Π°Β»
*a*ноль ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Β«Π°Β»

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹

Π‘ΠΈΠΌΠ²ΠΎΠ» «минус» (-) ΠΌΠ΅Ρ€Π΅Π΄ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ U) создаёт Π΅Π³ΠΎ ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅.

БпСцсимволы

АналогОписаниС
()подмаска, Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
[]Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ символ
количСство Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎΡ‚ Β«aΒ» Π΄ΠΎ Β«bΒ»
|логичСскоС Β«ΠΈΠ»ΠΈΒ», Π² случаС с ΠΎΠ΄Π½ΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ []
\экранированиС спСц символа
.любой сивол, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки
\d2дСсятичная Ρ†ΠΈΡ„Ρ€Π°
\D[^\d]любой символ, ΠΊΡ€ΠΎΠΌΠ΅ дСсятичной Ρ†ΠΈΡ„Ρ€Ρ‹
\fΠΊΠΎΠ½Π΅Ρ† (Ρ€Π°Π·Ρ€Ρ‹Π²) страницы
\nΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки
\pLΠ±ΡƒΠΊΠ²Π° Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ UTF-8 ΠΏΡ€ΠΈ использовании ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° u
\rΠ²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ
\s[ \t\v\r\n\f]ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΉ символ
\S[^\s]любой символ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π»ΡŒΠ½ΠΎΠ³ΠΎ
\tтабуляция
\w[0-9a-z_]любая Ρ†ΠΈΡ„Ρ€Π°, Π±ΡƒΠΊΠ²Π° ΠΈΠ»ΠΈ Π·Π½Π°ΠΊ подчСркивания
\W[^\w]любой символ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ†ΠΈΡ„Ρ€Ρ‹, Π±ΡƒΠΊΠ²Ρ‹ ΠΈΠ»ΠΈ Π·Π½Π°ΠΊΠ° подчСркивания
\vΠ²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ табуляция

БпСцсимволы Π²Π½ΡƒΡ‚Ρ€ΠΈ символьного класса

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
^[^da]ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅, любой символ ΠΊΡ€ΠΎΠΌΠ΅ Β«dΒ» ΠΈΠ»ΠΈ Β«aΒ»
[a-z]ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π», любой симво ΠΎΡ‚ Β«aΒ» Π΄ΠΎ Β«zΒ»

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ строки

Якоря

Якоря Π² рСгулярных выраТСниях ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ† Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ. НапримСр, строки ΠΈΠ»ΠΈ слова. Они прСдставлСны ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ символами. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, шаблон, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ строкС, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅ΠΉΡΡ с Ρ†ΠΈΡ„Ρ€Ρ‹, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

Π—Π΄Π΅ΡΡŒ символ ^ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ строки. Π‘Π΅Π· Π½Π΅Π³ΠΎ шаблон соотвСтствовал Π±Ρ‹ любой строкС, содСрТащСй Ρ†ΠΈΡ„Ρ€Ρƒ.

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ классы

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ классы Π² рСгулярных выраТСниях ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ сразу Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π°Π±ΠΎΡ€Ρƒ символов. НапримСр, \d соотвСтствуСт любой Ρ†ΠΈΡ„Ρ€Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 9 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, \w соотвСтствуСт Π±ΡƒΠΊΠ²Π°ΠΌ ΠΈ Ρ†ΠΈΡ„Ρ€Π°ΠΌ, Π° \W β€” всСм символам, ΠΊΡ€ΠΎΠΌΠ΅ Π±ΡƒΠΊΠ² ΠΈ Ρ†ΠΈΡ„Ρ€. Π¨Π°Π±Π»ΠΎΠ½, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π±ΡƒΠΊΠ²Ρ‹, Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π», выглядит Ρ‚Π°ΠΊ:

POSIX

POSIX β€” это ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ сСмСйства рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ИдСя, ΠΊΠ°ΠΊ ΠΈ Π² случаС с ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ классами, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² использовании сокращСний, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ символов.

УтвСрТдСния

ΠŸΠΎΠ½Π°Ρ‡Π°Π»Ρƒ практичСски Ρƒ всСх Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ трудности с ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ познакомившись с Π½ΠΈΠΌΠΈ Π±Π»ΠΈΠΆΠ΅, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… довольно часто. УтвСрТдСния ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ способ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ: «я Ρ…ΠΎΡ‡Ρƒ Π½Π°ΠΉΡ‚ΠΈ Π² этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ слово, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Π±ΡƒΠΊΠ²Ρƒ β€œq”, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ слСдуСт β€œwerty”».

Π˜Ρ‚Π°ΠΊ, парсСр провСряСт нСсколько ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… символов ΠΏΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ ( werty ). Если ΠΎΠ½ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹, Ρ‚ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π»ΠΎΠΆΠ½ΠΎ, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ символ q Π±ΡƒΠ΄Π΅Ρ‚ Β«ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Β», Ρ‚. Π΅. Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ. Если ΠΆΠ΅ werty Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Ρ‚ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Π½ΠΎ, ΠΈ с q всС Π² порядкС. Π—Π°Ρ‚Π΅ΠΌ продолТаСтся поиск Π»ΡŽΠ±Ρ‹Ρ… символов, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»Π° ( [^\s]* ).

ΠšΠ²Π°Π½Ρ‚ΠΎΡ€Ρ‹

ΠšΠ²Π°Π½Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ шаблона, которая Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ нСсколько Ρ€Π°Π· подряд. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, содСрТит Π»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ строку ΠΈΠ· ΠΎΡ‚ 10 Π΄ΠΎ 20 (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ) Π±ΡƒΠΊΠ² Β«aΒ», Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот шаблон:

Π­Ρ‚ΠΎΡ‚ шаблон соотвСтствуСт тСксту, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌΡƒ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Однако, ваша исходная строка ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ€ΠΎΠ΄Π΅ этой:

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ шаблон Π½Π°ΠΉΠ΄Π΅Ρ‚ Π² этой строкС Π²ΠΎΡ‚ Ρ‚Π°ΠΊΡƒΡŽ подстроку:

Он оказался слишком ΠΆΠ°Π΄Π½Ρ‹ΠΌ, Π·Π°Ρ…Π²Π°Ρ‚ΠΈΠ² наибольший кусок тСкста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ смог.

Π­ΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² рСгулярных выраТСниях

Π—Π½Π°ΠΊ экранирования, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ символу Π²Ρ€ΠΎΠ΄Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ, заставляСт парсСр ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ символом. Π•ΡΡ‚ΡŒ нСсколько символов, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π°ΠΊΠΎΠ³ΠΎ экранирования Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ шаблонов ΠΈ языков. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΈΡ… Π² ΠΏΡ€Π°Π²ΠΎΠΌ Π½ΠΈΠΆΠ½Π΅ΠΌ ΡƒΠ³Π»Ρƒ ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠΈ (Β«ΠœΠ΅Ρ‚Π°-символы»).

Π¨Π°Π±Π»ΠΎΠ½ для нахоТдСния Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ‚Π°ΠΊΠΎΠ²:

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы Π² рСгулярных выраТСниях ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ элСмСнтам Π² тСкстС. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΡ‹ строки ΠΈ табуляции, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π±Ρ€Π°Π½Ρ‹ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, Π½ΠΎ вСроятно ΡΠΎΠ±ΡŒΡŽΡ‚ с Ρ‚ΠΎΠ»ΠΊΡƒ языки программирования. Π—Π½Π°ΠΊ экранирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ здСсь для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ парсСру ΠΎ нСобходимости ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ символ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Π° Π½Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠΉ.

БпСцсимволы экранирования Π² рСгулярных выраТСниях

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° строк

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° строк ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описана Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ Β«Π“Ρ€ΡƒΠΏΠΏΡ‹ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹Β», ΠΎΠ΄Π½Π°ΠΊΠΎ здСсь слСдуСт ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ ΠΎ сущСствовании «пассивных» Π³Ρ€ΡƒΠΏΠΏ. Π­Ρ‚ΠΎ Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈ подстановкС, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² шаблонС условиС Β«ΠΈΠ»ΠΈΒ», Π½ΠΎ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эта Π³Ρ€ΡƒΠΏΠΏΠ° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π»Π° участиС Π² подстановкС.

Π“Ρ€ΡƒΠΏΠΏΡ‹ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹

Π“Ρ€ΡƒΠΏΠΏΡ‹ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ-ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹. ВСроятно, ΠΏΡ€ΠΎΡ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ с Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ². Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ подходящих символов. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, содСрТит Π»ΠΈ строка ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ (ΠΎΡ‚ 0 Π΄ΠΎ 9 ΠΈ ΠΎΡ‚ A Π΄ΠΎ F), слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² нашСм случаС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ΄ любой символ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ†ΠΈΡ„Ρ€ ΠΎΡ‚ 0 Π΄ΠΎ 9 ΠΈ Π±ΡƒΠΊΠ² ΠΎΡ‚ A Π΄ΠΎ F:

Π“Ρ€ΡƒΠΏΠΏΡ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π² шаблонС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ условиС Β«ΠΈΠ»ΠΈΒ»; ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‡Π°ΡΡ‚ΡŒ шаблона ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΅Π³ΠΎ части; Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ подстановкС строк.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠΈΠ»ΠΈΒ» ΠΎΡ‡Π΅Π½ΡŒ просто: ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаблон ΠΈΡ‰Π΅Ρ‚ Β«abΒ» ΠΈΠ»ΠΈ Β«bcΒ»:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ шаблон (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Π°ΠΌ понадобятся нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… символов для этой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ):

Он Π½Π°ΠΉΠ΄Π΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ вхоТдСния слова Β«wishΒ» вмСстС с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ символами, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это Π½Π΅ Π±ΡƒΠΊΠ²Ρ‹ ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹. Π’ΠΎΠ³Π΄Π° ваша подстановка ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ:

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ шаблонов

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ шаблонов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… языках, Π² частности, Π² Perl. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ парсСра. НапримСр, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ i заставляСт парсСр ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСгистры.

РСгулярныС выраТСния Π² Perl ΠΎΠ±Ρ€Π°ΠΌΠ»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ символом Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любой символ (Ρ‡Π°Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Β«/Β»), ΠΈ выглядит всС Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Π΅Ρ† этой строки, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

ΠœΠ΅Ρ‚Π°-символы

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

Π¨ΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° прСдставляСт собой ΠΎΠ±Ρ‰Π΅Π΅ руководство ΠΏΠΎ шаблонам рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° спСцифики ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ языка. Она прСдставлСна Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‰Π΅ΠΉΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΠΎΠΌ листС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° A4. Π‘ΠΎΠ·Π΄Π°Π½Π° ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Creative Commons Π½Π° Π±Π°Π·Π΅ ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠΈ, Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся Dave Child. Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π² PDF, PNG.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

РСгулярныС выраТСния для самых ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ…

МСня Π·ΠΎΠ²ΡƒΡ‚ Π’ΠΈΡ‚Π°Π»ΠΈΠΉ ΠšΠΎΡ‚ΠΎΠ² ΠΈ я Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ знаю ΠΎ рСгулярных выраТСниях. Под ΠΊΠ°Ρ‚ΠΎΠΌ я расскаТу основы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ. На эту Ρ‚Π΅ΠΌΡƒ написано ΠΌΠ½ΠΎΠ³ΠΎ тСорСтичСских статСй. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ€Π΅ΡˆΠΈΠ» ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡƒΠΏΠΎΡ€ Π½Π° количСство ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ². МнС каТСтся, Ρ‡Ρ‚ΠΎ это Π»ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ возмоТности этого инструмСнта.

НСкоторыС ΠΈΠ· Π½ΠΈΡ… для наглядности Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ языков программирования PHP ΠΈΠ»ΠΈ JavaScript, Π½ΠΎ Π² Ρ†Π΅Π»ΠΎΠΌ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ нСзависимо ΠΎΡ‚ ЯП.

Из названия понятно, Ρ‡Ρ‚ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° самый Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ β€” Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π΅Ρ‰Π΅ Π½ΠΈ Ρ€Π°Π·Ρƒ Π½Π΅ использовал рСгулярныС выраТСния Π² своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΈΠ»ΠΈ Π΄Π΅Π»Π°Π» это Π±Π΅Π· Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ³ΠΎ понимания.

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ я Π² Π΄Π²ΡƒΡ… словах расскаТу, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ нСльзя Ρ€Π΅ΡˆΠΈΡ‚ΡŒ рСгулярными выраТСниями ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ инструмСнты для этого стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ. Π€ΠΎΡ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ

ВступлСниС

РСгулярныС выраТСния β€” язык поиска подстроки ΠΈΠ»ΠΈ подстрок Π² тСкстС. Для поиска ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ (шаблон, маска), состоящий ΠΈΠ· символов ΠΈ мСтасимволов (символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Π½Π΅ сами сСбя, Π° Π½Π°Π±ΠΎΡ€ символов).

Π­Ρ‚ΠΎ довольно ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случая β€” поиск, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ строки ΠΈ Ρ‚.Π΄. Π‘ΠΏΠ΅ΠΊΡ‚Ρ€ Π΅Π³ΠΎ возмоТностСй Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡƒΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½Ρƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ.

Π’ PHP Ρ€Π°Π±ΠΎΡ‚Π° с рСгулярными выраТСниями Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π½Π°Π±ΠΎΡ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… я Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° match Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ число Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… подстрок ΠΈΠ»ΠΈ false Π² случаС ошибок. Ѐункция Π½Π° replace Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡƒΡŽ строку/массив ΠΈΠ»ΠΈ null Π² случаС ошибки. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ привСсти ΠΊ bool (false, Ссли Π½Π΅ Π±Ρ‹Π»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ true, Ссли Π±Ρ‹Π»ΠΎ) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСстС с if ΠΈΠ»ΠΈ assertTrue для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π’ JS Ρ‡Π°Ρ‰Π΅ всСго ΠΌΠ½Π΅ приходится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π’ PHP рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€” это строка, которая начинаСтся ΠΈ заканчиваСтся символом-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ. ВсС, Ρ‡Ρ‚ΠΎ находится ΠΌΠ΅ΠΆΠ΄Ρƒ раздСлитСлями ΠΈ Π΅ΡΡ‚ΡŒ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ раздСлитСлями ΡΠ²Π»ΡΡŽΡ‚ΡΡ косыС Ρ‡Π΅Ρ€Ρ‚Ρ‹ β€œ/”, Π·Π½Π°ΠΊΠΈ Ρ€Π΅ΡˆΠ΅Ρ‚ΠΊΠΈ β€œ#” ΠΈ Ρ‚ΠΈΠ»ΡŒΠ΄Ρ‹ β€œ

”. НиТС прСдставлСны ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ шаблонов с ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ раздСлитСлями:

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:

Или Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ самого простого рСгулярного выраТСния для поиска:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ просто ΠΈΡ‰Π΅ΠΌ всС символы β€œo”.

Π’ PHP Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ preg_match ΠΈ preg_match_all Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ пСрвая функция Π½Π°ΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ match ΠΈ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ поиск, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ вторая функция Π²Π΅Ρ€Π½Π΅Ρ‚ всС вхоТдСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Π½Π° PHP:

ΠŸΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ‚ΠΎ ΠΆΠ΅ самоС для Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π’ послСднСм случаС функция Π²Π΅Ρ€Π½ΡƒΠ»Π° всС вхоТдСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π² нашСм тСкстС.

Π’ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° JavaScript:

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ шаблонов

Для рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ сущСствуСт Π½Π°Π±ΠΎΡ€ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ поиска. Они ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ латинского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° ΠΈ ставятся Π² ΠΊΠΎΠ½Ρ†Π΅ рСгулярного выраТСния, послС Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ β€œ/”.

О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΡƒΡ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ рСгулярного выраТСния с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Π½Π° JavaScript:

ΠœΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ Π² рСгулярных выраТСниях

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ Π½Π°Ρ‡Π°Π»Ρƒ Π±ΡƒΠ΄ΡƒΡ‚ довольно ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ знакомимся с самыми основами. Π§Π΅ΠΌ большС ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ, Ρ‚Π΅ΠΌ Π±Π»ΠΈΠΆΠ΅ ΠΊ рСалиям Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

Π§Π°Ρ‰Π΅ всСго ΠΌΡ‹ Π·Π°Ρ€Π°Π½Π΅Π΅ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ тСкст Π½Π°ΠΌ придСтся ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ. Π—Π°Ρ€Π°Π½Π΅Π΅ извСстСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ». Π‘ΡƒΠ΄ΡŒ Ρ‚ΠΎ ΠΏΠΈΠ½ΠΊΠΎΠ΄ Π² смс, email Π² письмС ΠΈ Ρ‚.ΠΏ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС числа ΠΈΠ· тСкста:

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ любоС число, Π½Π°Π΄ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС числа, ΡƒΠΊΠ°Π·Π°Π² β€œ[0123456789]”. Π‘ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ: β€œ4”. Для всСх Ρ†ΠΈΡ„Ρ€ сущСствуСт мСтасимвол β€œ\d”. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ.

Но Ссли ΠΌΡ‹ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€œ/\d/”, Ρ‚ΠΎ Π½Π°ΠΌ вСрнётся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрвая Ρ†ΠΈΡ„Ρ€Π°. ΠœΡ‹, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ β€œg”, Π½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС каТдая Ρ†ΠΈΡ„Ρ€Π° вСрнСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтом массива, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Π½ΠΎΠ²Ρ‹ΠΌ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти подстроку Π΅Π΄ΠΈΠ½Ρ‹ΠΌ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ символы плюс β€œ+” ΠΈ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ° β€œ*”. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ подстрока, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ подходящий ΠΏΠΎΠ΄ Π½Π°Π±ΠΎΡ€ символ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ β€” Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ символов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ, ΠΈ это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. Помимо этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ подходящих символов Π²ΠΎΡ‚ Ρ‚Π°ΠΊ: β€œβ€, Π³Π΄Π΅ N β€” Π½ΡƒΠΆΠ½ΠΎΠ΅ количСство. Или Π·Π°Π΄Π°Ρ‚ΡŒ β€œΠΎΡ‚β€ ΠΈ β€œΠ΄ΠΎβ€, ΡƒΠΊΠ°Π·Π°Π² Π²ΠΎΡ‚ Ρ‚Π°ΠΊ: β€œβ€.

БСйчас Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ°Ρ€Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ это ΡƒΠ»ΠΎΠΆΠΈΠ»ΠΎΡΡŒ Π² Π³ΠΎΠ»ΠΎΠ²Π΅:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π±ΡƒΠΊΠ²Π°ΠΌΠΈ, Π½Π΅ забывая, Ρ‡Ρ‚ΠΎ Ρƒ Π½ΠΈΡ… Π±Ρ‹Π²Π°Π΅Ρ‚ рСгистр. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Ρ‹:

Π’Π°ΠΊΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ всС слова, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ написаны ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π΅ΠΉ. Нам Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ слово.

Помимо Π±ΡƒΠΊΠ² ΠΈ Ρ†ΠΈΡ„Ρ€ Ρƒ нас ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‰Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ символы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ:

Если ΠΌΡ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ искомоС слово послСднСС, ΠΌΡ‹ ставим β€œ$” ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ символов, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ† строки.

Π’ΠΎ ΠΆΠ΅ самоС с Π½Π°Ρ‡Π°Π»ΠΎΠΌ строки:

ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с мСтасимволами дальшС, Π½Π°Π΄ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ символ β€œ^”, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρƒ нас Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° Π΄Π²Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сразу (это Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ интСрСснСС). Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΎΠ½ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ строки, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… β€” ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅.

Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Ρ‚Π΅Ρ… случаСв, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΡ‰Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нас Π½Π΅ ΡƒΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚, Ρ‡Π΅ΠΌ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚.

Допустим, ΠΌΡ‹ собрали Π½Π°Π±ΠΎΡ€ символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ подходят: β€œ[a-z0-9]” (нас устроит любая малСнькая латинская Π±ΡƒΠΊΠ²Π° ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€Π°). А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ нас устроит любой символ, ΠΊΡ€ΠΎΠΌΠ΅ этого. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ: β€œ[^a-z0-9]”.

Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ всС β€œΠ½Π΅ пробСлы”.

Π˜Ρ‚Π°ΠΊ, Π²ΠΎΡ‚ список основных мСтасимволов:

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ [] ΠΈ ()

По описанному Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ [] ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… символов вмСстС. Π’Π°ΠΊ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ нас устроит любой символ ΠΈΠ· Π½Π°Π±ΠΎΡ€Π°.

Π’ΡƒΡ‚ ΠΌΡ‹ собрали Π² Π³Ρ€ΡƒΠΏΠΏΡƒ (ΠΌΠ΅ΠΆΠ΄Ρƒ символами []) всС латинскиС Π±ΡƒΠΊΠ²Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π». ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ <> ΡƒΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ нас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ вхоТдСния, Π³Π΄Π΅ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 2 символа, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ вхоТдСния ΠΈΠ· пустых ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ².

Аналогично ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС русскиС слова, сдСлав ΠΈΠ½Π²Π΅Ρ€ΡΠΈΡŽ: β€œ[^A-Za-z\s]<2,>”.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ [], символы () ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ выраТСния. Π˜Ρ… ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ β€œΠ·Π°Ρ…Π²Π°Ρ‚ΠΎΠΌβ€.

Они Π½ΡƒΠΆΠ½Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ кусок (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ [] Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π΄Π°Ρ‡ΠΈ).

БущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ β€” это ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ возмоТности рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. На самом Π΄Π΅Π»Π΅ Π΅ΡΡ‚ΡŒ RFC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ email. И Π΅ΡΡ‚ΡŒ β€œΡ€Π΅Π³ΡƒΠ»ΡΡ€ΠΊΠΈβ€ ΠΏΠΎ RFC β€” Π²ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

ΠœΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ всС, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠ±Π΅Π» (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ пСрвая Ρ‡Π°ΡΡ‚ΡŒ email ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ любой Π½Π°Π±ΠΎΡ€ символов), Π΄Π°Π»Π΅Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ΄Ρ‚ΠΈ символ @, Π΄Π°Π»Π΅Π΅ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Π°, Π΄Π°Π»Π΅Π΅ Ρ‚ΠΎΡ‡ΠΊΠ°, Π΄Π°Π»Π΅Π΅ любой символ Π»Π°Ρ‚ΠΈΠ½ΠΈΡ†Ρ‹ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС…

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ! Но Ρ‡Ρ‚ΠΎ, Ссли Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΌΠ΅Π½ ΠΈ имя ΠΏΠΎ email? И ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ дальшС Π² ΠΊΠΎΠ΄Π΅? Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ β€œΠ·Π°Ρ…Π²Π°Ρ‚β€. ΠœΡ‹ просто Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, ΠΈ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°ΠΊΠ°ΠΌΠΈ (), ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π’ массивС match Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ элСмСнтом всСгда ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ рСгулярного выраТСния. А дальшС ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈΠ΄ΡƒΡ‚ β€œΠ·Π°Ρ…Π²Π°Ρ‚Ρ‹β€.

Π’ PHP ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ β€œΠ·Π°Ρ…Π²Π°Ρ‚Ρ‹β€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

Π’ΠΎΠ³Π΄Π° массив ΠΌΠ°Ρ‚Ρ‡Π° станСт ассоциативным:

Π­Ρ‚ΠΎ сразу +100 ΠΊ читаСмости ΠΈ ΠΊΠΎΠ΄Π°, ΠΈ рСгулярки.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ

ΠŸΠ°Ρ€ΡΠΈΠΌ письмо Π² поисках Π½ΠΎΠ²ΠΎΠ³ΠΎ пароля:

Π•ΡΡ‚ΡŒ письмо с HTML-ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π°Π΄ΠΎ Π²Ρ‹Π΄Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ. ВСкст ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π½Π° английском, Π»ΠΈΠ±ΠΎ Π½Π° русском:

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ тСкст ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π²ΡƒΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², использовав β€œΠΈΠ»ΠΈβ€.
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ:

Π”Π°Π»Π΅Π΅ Ρƒ нас Π·Π½Π°ΠΊ двоСточия ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ±Π΅Π»:

А дальшС нас интСрСсуСт всС, Ρ‡Ρ‚ΠΎ Π½Π΅ символ β€œ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π¨ΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° ΠΏΠΎ рСгулярным выраТСниям. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…

с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ. Π€ΠΎΡ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ

Jan 6, 2019 Β· 5 min read

с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ. Π€ΠΎΡ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ

РСгулярныС выраТСния (regex ΠΈΠ»ΠΈ regexp) ΠΎΡ‡Π΅Π½ΡŒ эффСктивны для извлСчСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· тСкста. Для этого Π½ΡƒΠΆΠ½ΠΎ произвСсти поиск ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… совпадСний ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ (Ρ‚. Π΅. ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ символов ASCII ΠΈΠ»ΠΈ unicode).

ΠžΠ±Π»Π°ΡΡ‚ΠΈ примСнСния regex Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹, ΠΎΡ‚ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π΄ΠΎ парсинга/Π·Π°ΠΌΠ΅Π½Ρ‹ строк, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΈ Web Scraping’а.

Одна ΠΈΠ· Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… особСнностСй рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈ ΠΉ Π² ΠΈΡ… ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, стоит Π²Π°ΠΌ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ синтаксис, ΠΈ Π²Ρ‹ смоТСтС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… Π² любом (ΠΏΠΎΡ‡Ρ‚ΠΈ) языкС программирования (JavaScript, Java, VB, C #, C / C++, Python, Perl, Ruby, Delphi, R, Tcl, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ…). НСбольшиС отличия ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ вСрсий синтаксиса, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠΌ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

ΠžΡΠ½ΠΎΠ²Ρ‹

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π˜Π›Π˜ β€” | ΠΈΠ»ΠΈ []

Π€Π»Π°Π³ΠΈ

ΠœΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ рСгулярныС выраТСния, Π½ΠΎ Π·Π°Π±Ρ‹Π»ΠΈ ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ― Ρ„Π»Π°Π³Π°Ρ….

Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

Π‘ΠΊΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ ― ()

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

Π‘ΠΊΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ выраТСния ― []

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ скобочных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ всС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΊΠΎΡΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ \ ) Ρ‚Π΅Ρ€ΡΡŽΡ‚ своё слуТСбноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, поэтому Π½Π°ΠΌ Π½Π΅Π½ΡƒΠΆΠ½ΠΎ ΠΈΡ… ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π–Π°Π΄Π½Ρ‹Π΅ ΠΈ Π»Π΅Π½ΠΈΠ²Ρ‹Π΅ сопоставлСния

ΠšΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ( * + <> ) ― это Β«ΠΆΠ°Π΄Π½Ρ‹Π΅Β» ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ поиск соотвСтствий, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π³Π»ΡƒΠ±ΠΆΠ΅ ― Ρ‡Π΅Ρ€Π΅Π· вСсь тСкст.

НапримСр, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ соотвСтствуСт

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

Π“Ρ€Π°Π½ΠΈΡ†Ρ‹ слов ― \b ΠΈ \B

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *