PHP 8.5.0 Beta 3 available for testing

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

ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ квадратная скобка ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ символьного класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ скобкой. Π‘ΠΈΠΌΠ²ΠΎΠ» Β«]Β» Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния, ΠΈ Ссли Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ квадратная скобка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΠΊΠ°ΠΊ Ρ‡Π»Π΅Π½ символьного класса, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ символом нСпосрСдствСнно послС ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ скобки (Ссли ΡƒΠΊΠ°Π·Π°Π½ мСтасимвол Β«^Β», Ρ‚ΠΎ нСпосрСдствСнно послС Π½Π΅Π³ΠΎ), Π»ΠΈΠ±ΠΎ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ слСшСм.

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс соотвСтствуСт ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΌΡƒ символу Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки; символ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π½Π°Π±ΠΎΡ€ символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π² классС, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ Π² классС Π½Π΅ циркумфлСкс Β«^Β», Ρ‚ΠΎΠ³Π΄Π° символ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² класс. Если циркумфлСкс Β«^Β» Π½ΡƒΠΆΠ΅Π½ ΠΊΠ°ΠΊ Ρ‡Π»Π΅Π½ класса, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π½Π΅ ΡˆΡ‘Π» ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ символом Π² описании класса, Π»ΠΈΠ±ΠΎ ΡΠΊΡ€Π°Π½ΠΈΡ€ΡƒΡŽΡ‚ циркумфлСкс ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ слСшСм.

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс [aeiou], Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, соотвСтствуСт любой гласной Π±ΡƒΠΊΠ²Π΅ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ класс [^aeiou] соотвСтствуСт Π»ΡŽΠ±ΠΎΠΌΡƒ согласному символу Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистра. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ циркумфлСкс β€” просто ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс Π·Π° счёт пСрСчислСния Ρ‚Π΅Ρ… символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² класс. Π‘ΠΈΠΌΠ²ΠΎΠ» Π½Π°Ρ‡Π°Π»Π° строки β€” Π½Π΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅: ΠΎΠ½ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ символ ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой, Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ находится Π² ΠΊΠΎΠ½Ρ†Π΅ строки.

ΠŸΡ€ΠΈ рСгистронСзависимом сопоставлСнии Π±ΡƒΠΊΠ²Ρ‹ символьного класса соотвСтствуСт вСрсии символа ΠΊΠ°ΠΊ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ, Ρ‚Π°ΠΊ ΠΈ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс [aeiou] соотвСтствуСт ΠΊΠ°ΠΊ Π±ΡƒΠΊΠ²Π΅ Β«AΒ», Ρ‚Π°ΠΊ ΠΈ Π±ΡƒΠΊΠ²Π΅ Β«aΒ». Аналогично, класс [^aeiou] Π½Π΅ соотвСтствуСт Π½ΠΈ Β«AΒ», Π½ΠΈ Β«aΒ», Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² рСгистрозависимом Ρ€Π΅ΠΆΠΈΠΌΠ΅ совпадСниС Π±Ρ‹ ΡΠΎΡΡ‚ΠΎΡΠ»ΠΎΡΡŒ.

Π’Π½ΡƒΡ‚Ρ€ΠΈ символьного класса Ρƒ символа ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки Β«\nΒ» Π½Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния, нСзависимо ΠΎΡ‚ наличия ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² PCRE_DOTALL ΠΈ PCRE_MULTILINE. Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ классы, построСнныС Π½Π° ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ [^a], всСгда ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ символу ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки.

Π‘ΠΈΠΌΠ²ΠΎΠ» минус Β«-Β» (дСфис) Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для задания символьного Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. НапримСр, [d-m] соотвСтствуСт Π»ΡŽΠ±ΠΎΠΌΡƒ символу, находящСмуся ΠΌΠ΅ΠΆΠ΄Ρƒ Β«dΒ» ΠΈ Β«mΒ», Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сами символы Β«dΒ» ΠΈ Β«mΒ». Если Β«-Β» Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Ρ‡Π»Π΅Π½ класса, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ послСдний символ описания класса), Π»ΠΈΠ±ΠΎ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ слСша.

НСдопустимо Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΡƒΡŽ скобку Β«]Β» ΠΊΠ°ΠΊ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ символьного Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. НапримСр, парсСр ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ шаблон Β«[W-]46]Β» ΠΊΠ°ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· Π΄Π²ΡƒΡ… символов: Β«WΒ» ΠΈ Β«-Β», Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈΠ΄Ρ‘Ρ‚ строка Β«46]Β», поэтому шаблон Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ строкам Β«W46]Β» ΠΈΠ»ΠΈ Β«-46]Β». Π§Ρ‚ΠΎΠ±Ρ‹ всё ΠΆΠ΅ Π·Π°Π΄Π°Ρ‚ΡŒ символ Β«]Β» Π² описании Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ слСшСм, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, парсСр ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ шаблон [W-\]46] ΠΊΠ°ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· символьного Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° вмСстС с двумя ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ символами Β«4Β» ΠΈ Β«6Β». Π’Π°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ ΠΈΠ»ΠΈ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС символа Β«]Β».

Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… классов ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ASCII-символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· символ Β«-Β». Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ числами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ [\000-\037]. Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Π°ΠΌ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрах, Ссли Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Π±ΡƒΠΊΠ²Ρ‹ ΠΈ установили рСгистронСзависимоС сопоставлСниС. НапримСр, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ [W-c] ΠΈ [][\^_`wxyzabc] эквивалСнтны, парсСр сопоставляСт символы Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° рСгистра, Π° Ссли установлСна Ρ‚Π°Π±Π»ΠΈΡ†Π° символов для французской Π»ΠΎΠΊΠ°Π»ΠΈ Β«frΒ», парсСр Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ символы ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° [\xc8-\xcb] ΡƒΠ΄Π°Ρ€Π½ΠΎΠΌΡƒ Β«EΒ» Π² ΠΎΠ±ΠΎΠΈΡ… рСгистрах.

Π’ΠΈΠΏΠ°ΠΌ символов \d, \D, \s, \S, \w ΠΈ \W Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… классах ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚, Π² класс. НапримСр, класс [\dABCDEF] соотвСтствуСт любой ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ Ρ†ΠΈΡ„Ρ€Π΅. Π‘ΠΈΠΌΠ²ΠΎΠ» Β«^Β» ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ символов Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ·ΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ символов. НапримСр, класс [^\W_] соотвСтствуСт любой Π±ΡƒΠΊΠ²Π΅ ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€Π΅, Π½ΠΎ Π½Π΅ символу подчёркивания.

ВсС Π½Π΅Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ символы, ΠΊΡ€ΠΎΠΌΠ΅ \, -, ^ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ символа Β«]Β» Π² ΠΊΠΎΠ½Ρ†Π΅, Π½Π΅ относятся ΠΊ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ символам Π² символьном классС, Π½ΠΎ ΡΠΊΡ€Π°Π½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ слСш ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ Π½Π΅ Π½Π°Π²Ρ€Π΅Π΄ΠΈΡ‚. Π‘ΠΈΠΌΠ²ΠΎΠ» ΠΊΠΎΠ½Ρ†Π° шаблона β€” всСгда ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ заэкранирован Π²Π½ΡƒΡ‚Ρ€ΠΈ выраТСния.

Π―Π·Ρ‹ΠΊ Perl ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ POSIX для ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… классов. Π­Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π° Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках: [: ΠΈ :]. ΠœΠΎΠ΄ΡƒΠ»ΡŒ PCRE Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ эту Ρ‚ΠΈΠΏ записи. НапримСр, шаблон [01[:alpha:]%] совпадёт с Β«0Β», Β«1Β», Π»ΡŽΠ±Ρ‹ΠΌ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½Ρ‹ΠΌ символом ΠΈΠ»ΠΈ символом Β«%Β». ΠœΠΎΠ΄ΡƒΠ»ΡŒ PCRE ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° классов:

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ классы
alnumΠ±ΡƒΠΊΠ²Ρ‹ ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹
alphaΠ±ΡƒΠΊΠ²Ρ‹
asciiсимволы с ΠΊΠΎΠ΄Π°ΠΌΠΈ 0–127
blankΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ±Π΅Π» ΠΈΠ»ΠΈ символ табуляции
cntrlΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы
digitдСсятичныС Ρ†ΠΈΡ„Ρ€Ρ‹ (Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ \d)
graphΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹Π΅ символы, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΠΎΠ±Π΅Π»
lowerстрочныС Π±ΡƒΠΊΠ²Ρ‹
printΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹Π΅ символы, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΠΎΠ±Π΅Π»
punctΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹Π΅ символы, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ Π±ΡƒΠΊΠ²Ρ‹ ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹
spaceΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы(ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ \s)
upperпрописныС Π±ΡƒΠΊΠ²Ρ‹
wordсимволы «слова» (Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ \w)
xdigitΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹
Класс ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов (space) β€” это Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ табуляция (HT, 9), ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки (LF, 10), Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ табуляция (VT, 11), Ρ€Π°Π·Ρ€Ρ‹Π² страницы (FF, 12), Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ (CR, 13) ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π» (32). Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ этот список Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±ΡƒΠ»ΡΡ†ΠΈΡŽ (VT, ΠΊΠΎΠ΄ 11). Π­Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ Β«spaceΒ» ΠΎΡ‚ \s, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ этот символ (для совмСстимости с Perl).

НазваниС word β€” это ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Perl, Π° blank β€” ΠΌΠΎΠ΄ΡƒΠ»ΡŒ GNU, начиная с вСрсии Perl 5.8. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Perl β€” ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ указываСтся символом ^ послС двоСточия. НапримСр, [12[:^digit:]] совпадёт с Β«1Β», Β«2Β», ΠΈΠ»ΠΈ с любой Π½Π΅-Ρ†ΠΈΡ„Ρ€ΠΎΠΉ.

Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ UTF-8 символы со значСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‚ 128, Π½Π΅ совпадут Π½ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… классов POSIX. Начиная с libpcre 8.10 Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ классы ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойства символов Unicode, Π² этом случаС упомянутоС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ примСняСтся. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом рассказываСт Β» Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ PCRE(3).

Бвойства символов Unicode ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ символьного класса. Они Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. Π‘ΠΈΠΌΠ²ΠΎΠ» минус (дСфис), послС символьного класс Unicode Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ свойством символа Unicode Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅.

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

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

up
27
greaties at ghvernuft dot nl ΒΆ
3 years ago
From deep down the PCRE manual at http://www.pcre.org/pcre.txt :

\d any decimal digit
\D any character that is not a decimal digit
\h any horizontal white space character
\H any character that is not a horizontal white space character
\s any white space character
\S any character that is not a white space character
\v any vertical white space character
\V any character that is not a vertical white space character
\w any "word" character
\W any "non-word" character
up
10
Julian ΒΆ
2 years ago
Examples with Character classes

<?php

$stringA
= "1 In the beginning God created the heavens and the earth.";
$stringB = preg_replace('/[[:^alnum:]]/', '', $stringA); // string(46) "1InthebeginningGodcreatedtheheavensandtheearth"
$stringC = preg_replace('/[[:^alpha:]]/', '', $stringA); // string(45) "InthebeginningGodcreatedtheheavensandtheearth"
$stringD = preg_replace('/[[:^ascii:]]/', '', "PokΓ©mon"); // string(6) "Pokmon"
$stringE = preg_replace('/[[:^blank:]]/', '*', $stringA); // string(57) "* ** *** ********* *** ******* *** ******* *** *** ******"
$stringF = preg_replace('/[[:blank:]]/', '-', $stringA); // string(57) "1-In-the-beginning-God-created-the-heavens-and-the-earth."

$stringG = sprintf("Vertical Tabulation: %s", chr(11)); // string(22) "Vertical Tabulation: "
$stringH = preg_replace('/[[:cntrl:]]/', '', $stringG); // string(21) "Vertical Tabulation: "
$stringLengthG = strlen($stringG); // int(22)
$stringLengthH = strlen($stringH); // int(21)

$stringI = preg_replace('/[[:digit:]]/', '', 'My age is 35'); //string(10) "My age is "
$stringJ = preg_replace('/[[:^digit:]]/', '', 'My age is 35'); // string(2) "35"

$stringK = preg_replace('/[[:^graph:]]/', '', $stringG); // string(19) "VerticalTabulation:"
$stringL = preg_replace('/[[:graph:]]/', '', $stringG); // string(3) " "

$stringM = preg_replace('/[[:lower:]]/', '', $stringG); // string(6) "V T: "
$stringN = preg_replace('/[[:^lower:]]/', '', $stringG); // string(16) "erticalabulation"

$stringO = preg_replace('/[[:^print:]]/', '', $stringG); // string(21) "Vertical Tabulation: "
$stringP = preg_replace('/[[:print:]]/', '', $stringG); // string(1) " "

$stringQ = preg_replace('/[[:punct:]]/', '', $stringG); // string(21) "Vertical Tabulation "
$stringR = preg_replace('/[[:^punct:]]/', '', $stringG); // string(1) ":"

$stringS = preg_replace('/[[:space:]]/', '', $stringG); // string(19) "VerticalTabulation:"
$stringT = preg_replace('/[[:^space:]]/', '', $stringG); // string(3) " "

$stringU = preg_replace('/[[:upper:]]/', '', $stringG); // string(20) "ertical abulation: "
$stringV = preg_replace('/[[:^upper:]]/', '', $stringG); // string(2) "VT"

$stringW = preg_replace('/[[:word:]]/', '', $stringG); // string(4) " : "
$stringX = preg_replace('/[[:^word:]]/', '', $stringG); // string(18) "VerticalTabulation"

$stringY = preg_replace('/[[:xdigit:]]/', '', 'abcdefghijklmnopqrstuvwxyz0123456789'); // string(20) "ghijklmnopqrstuvwxyz"
$stringZ = preg_replace('/[[:^xdigit:]]/', '', 'abcdefghijklmnopqrstuvwxyz0123456789'); // string(16) "abcdef0123456789"
up
7
wordragon at wrestingcontrol dot com ΒΆ
7 years ago
The documentation says:

"The character types \d, \D, \s, \S, \w, and \W may also appear in a character class, and add the characters that they match to the class."

It does not stress that other escape types may not. I wanted to split a string on either a comma (","), or a new line "\n". When my input stream began to include "\r\n", I decided to change "\n" to "\R". Unfortunately, my test string did not include a capital "R", or I might have found the problem sooner. My '/[\R,]/' was simply splitting on comma and the letter "R".

My test string...
"The Yum-Yum Company\r\n127 bernard street"

What DID work: '/(?:\R|,)+/'

["The Yum-Yum Company","127 bernard street"]

Given character classes only match one character, I can see clearly why my expectations were justifiably dashed, but hopefully this comment will save time for someone else.

I might add, this has taught me the value of PCRE_EXTRA (modifier "X"), which I have begun to use routinely now.
To Top