ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ опрСдСляСтся ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΄ΡƒΡ‚ Π·Π° Π»ΡŽΠ±Ρ‹ΠΌ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… элСмСнтов:

  • ΠΎΠ΄Π½ΠΈΠΌ символом, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, экранированным
  • мСтасимволом Β«Ρ‚ΠΎΡ‡ΠΊΠ°Β»
  • ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ классом
  • ссылкой Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ шаблона (смотритС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»)
  • взятым Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки подшаблоном (Ссли это Π½Π΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ β€” смотритС Π΄Π°Π»Π΅Π΅)

ΠžΠ±Ρ‰ΠΈΠΉ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ повторСния ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ минимальноС ΠΈ максимальноС допустимоС количСство совпадСний, согласно Π΄Π²ΡƒΠΌ числам Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках, Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ запятой. Числа Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ мСньшС Ρ‡Π΅ΠΌ 65 536, ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. НапримСр: z{2,4} соотвСтствуСт Β«zzΒ», Β«zzzΒ» ΠΈΠ»ΠΈ Β«zzzzΒ». Π—Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ фигурная скобка сама ΠΏΠΎ сСбС β€” Π½Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ. Если Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число опустили, Π½ΠΎ Π·Π°ΠΏΡΡ‚ΡƒΡŽ поставили, Π½Π΅Ρ‚ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Π°; Если ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число, ΠΈ Π·Π°ΠΏΡΡ‚ΡƒΡŽ опустили, трСбуСтся Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ число ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ шаблон [aeiou]{3,} соотвСтствуСт ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ‚Ρ€Ρ‘ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ гласным, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»ΡŽΠ±ΠΎΠΌΡƒ количСству гласных Π²Ρ‹ΡˆΠ΅ Ρ‚Ρ€Ρ‘Ρ…, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ шаблон \d{8} соотвСтствуСт Ρ€ΠΎΠ²Π½ΠΎ восьми Ρ†ΠΈΡ„Ρ€Π°ΠΌ.

Π”ΠΎ PHP 8.4.0 ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ фигурная скобка, которая появляСтся Π² мСстС, Π³Π΄Π΅ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π΅ допускаСтся ΠΈΠ»ΠΈ которая Π½Π΅ соотвСтствуСт синтаксису ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, рассматриваСтся ΠΊΠ°ΠΊ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ символ. НапримСр, {,6} Π½Π΅ являСтся ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, Π° прСдставляСт собой Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ строку ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… символов. Начиная с PHP 8.4.0, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ PCRE поставляСтся Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с PCRE2 вСрсии 10.44, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ допускаСт Ρ‚Π°ΠΊΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, ΠΊΠ°ΠΊ \d{,8} ΠΈ ΠΎΠ½ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ \d{0,8}. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, начиная с PHP 8.4.0, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ \d{0 , 8} ΠΈ \d{ 0 , 8 }.

ΠšΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ {0} β€” допустим ΠΈ Π²Π΅Π΄Ρ‘Ρ‚ сСбя Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π±ΡƒΠ΄Ρ‚ΠΎ Π±Ρ‹ сам ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ элСмСнт ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

Для удобства, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости, Ρƒ Ρ‚Ρ€Ρ‘Ρ… Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённых ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΎΠ΄Π½ΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹:

ΠžΠ΄Π½ΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹
* эквивалСнтСн {0,}
+ эквивалСнтСн {1,}
? эквивалСнтСн {0,1}

МоТно ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ бСсконСчныС Ρ†ΠΈΠΊΠ»Ρ‹, ΡƒΠΊΠ°Π·Π°Π² послС шаблона, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ совпадаСт с пустой строкой, ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π±Π΅Π· Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: (a?)*

Π Π°Π½Π½ΠΈΠ΅ вСрсии языка Perl ΠΈ модуля PCRE Π²Ρ‹Π΄Π°Π²Π°Π»ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²ΠΎ врСмя компиляции для Ρ‚Π°ΠΊΠΈΡ… шаблонов. Однако, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±Ρ‹Π²Π°ΡŽΡ‚ случаи, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚Π°ΠΊΠΈΡ… шаблонов. Но Ссли любоС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ подшаблона фактичСски Π½Π΅ совпадаСт Π½ΠΈ с ΠΊΠ°ΠΊΠΈΠΌΠΈ символами, Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ прСрываСтся.

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

Однако, Ссли сразу ΠΆΠ΅ послС ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈΠ΄Ρ‘Ρ‚ Π²ΠΎΠΏΡ€ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ, ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ становится Β«Π»Π΅Π½ΠΈΠ²Ρ‹ΠΌΒ» ΠΈ соотвСтствуСт минимально допустимому количСству Ρ€Π°Π·. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ шаблон /\*.*?\*/ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ языка C. Π—Π½Π°ΠΊ Β«?Β» послС ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° влияСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π΅Π³ΠΎ ΠΆΠ°Π΄Π½ΠΎΡΡ‚ΡŒ, ΠΈ Π½Π΅ влияСт Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ свойства. НС Π½ΡƒΠΆΠ½ΠΎ ΠΏΡƒΡ‚Π°Ρ‚ΡŒ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Β«?Β» (ноль ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ соотвСтствиС) ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ Тадности. Из-Π·Π° Π΅Π³ΠΎ двойствСнности ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ записью: \d??\d, которая, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, соотвСтствуСт ΠΎΠ΄Π½ΠΎΠΉ Ρ†ΠΈΡ„Ρ€Π΅, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Π²ΡƒΠΌ Ρ†ΠΈΡ„Ρ€Π°ΠΌ, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для соотвСтствия ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… частСй шаблона.

Если установили ΠΎΠΏΡ†ΠΈΡŽ PCRE_UNGREEDY (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅Ρ‚ Π² языкС Perl), ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°ΡŽΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΆΠ°Π΄Π½Ρ‹ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ ΠΆΠ°Π΄Π½Ρ‹ΠΌΠΈ, Ссли Π·Π° Π½ΠΈΠΌΠΈ ΠΈΠ΄Ρ‘Ρ‚ символ Β«?Β». Говоря Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π·Π½Π°ΠΊ вопроса ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΆΠ°Π΄Π½ΠΎΡΡ‚ΡŒ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ².

ΠšΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈΠ΄Ρ‘Ρ‚ символ +, β€” Β«Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅Β». Они ΠΏΠΎΠ³Π»ΠΎΡ‰Π°ΡŽΡ‚ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ символов, сколько ΠΌΠΎΠ³ΡƒΡ‚, ΠΈ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ для совпадСния остатка шаблона. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ шаблон .*abc совпадёт с Β«aabcΒ», Π° .*+abc β€” Π½Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ подшаблон .*+ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ всю строку Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Π—Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ускорСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Если Π·Π°Π΄Π°Π»ΠΈ подшаблон с ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ установили минимальноС количСство ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ (большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ), Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°Π»ΠΈ максимальноС количСство ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ для ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ шаблона трСбуСтся большС памяти (ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ Π»ΠΈΠ±ΠΎ максимуму соотвСтствСнно).

Если шаблон начинаСтся с символов .* Π»ΠΈΠ±ΠΎ .{0,} ΠΈ установили ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ PCRE_DOTALL (Π°Π½Π°Π»ΠΎΠ³ Perl-ΠΎΠΏΡ†ΠΈΠΈ /s), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ мСтасимволу Β«Ρ‚ΠΎΡ‡ΠΊΠ°Β» ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌ строк, шаблон нСявно заякориваСтся. Π­Ρ‚ΠΎ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ конструкции парсСр Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ символьной ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ Π² ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ тСкстС, ΠΈ, ΠΊΠ°ΠΊ слСдствиС, Π½Π°Ρ‡Π°Π»ΠΎ строки β€” СдинствСнная позиция, которая Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ совпадСниС. ΠœΠΎΠ΄ΡƒΠ»ΡŒ PCRE рассматриваСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π°ΠΊΠΎΠΉ шаблон, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π΅ΠΌΡƒ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Π»Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ \A. Если извСстно, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ содСрТат ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² строк, Π° сам шаблон начинаСтся с символов .*, рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ PCRE_DOTALL для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ шаблона, Π»ΠΈΠ±ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ мСтасимвол Β«^Β» для явного заякоривания.

Если Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ подшаблон повторяСтся, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ подшаблона Π±ΡƒΠ΄Π΅Ρ‚ подстрока, которая совпадаСт с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ послСднСй ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. НапримСр, ΠΊΠΎΠ³Π΄Π° шаблон (tweedle[dume]{3}\s*)+ совпадёт со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Β«tweedledum tweedledeeΒ», Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ подшаблона Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«tweedledeeΒ». Однако, Ссли ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ этим подшаблонам, допускаСтся ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… итСрациях. НапримСр, ΠΊΠΎΠ³Π΄Π° шаблон /(a|(b))+/ совпадёт со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Β«abaΒ», Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½ΠΎΠΉ подстроки Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«bΒ».

οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ добавляли примСчания для страницы