Π Π°Π±ΠΎΡ‚Π° со строками Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых частых Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ ΠΈ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ². Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ послСднСго символа ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ очисткС Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Π·Π°Π΄Π°Ρ‡Π° каТСтся Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ Π² 1Π‘ Π΅ΡΡ‚ΡŒ нСсколько нюансов: ΠΎΡ‚ особСнностСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ пустых строк ΠΈ символов пСрСноса.

МногиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ Π›Π΅Π²() ΠΈ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(), ΠΎΠ΄Π½Π°ΠΊΠΎ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ всСгда унивСрсалСн. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ 5 Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² β€” ΠΎΡ‚ классичСских Π΄ΠΎ малоизвСстных, β€” Π° Ρ‚Π°ΠΊΠΆΠ΅ рассмотрим Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π° для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… массивов Π΄Π°Π½Π½Ρ‹Ρ…. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (UTF-8), Π³Π΄Π΅ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с 1Π‘ 8.3 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠΌΠΈ вСрсиями, Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π·Π° счСт Π½ΠΎΠ²Ρ‹Ρ… встроСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Для ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ (8.2 ΠΈ Π½ΠΈΠΆΠ΅) ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ протСстированы Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·Π°Ρ… 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.22 ΠΈ 8.3.23, Π½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΈ ΠΊ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠΌ вСрсиям с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ синтаксичСских особСнностСй.

πŸ“Š Какой вСрсии 1Π‘ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅?
8.3 (послСдняя)
8.2
8.1 ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ€ΡˆΠ΅
НС знаю Π²Π΅Ρ€ΡΠΈΡŽ

1. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ способ: комбинация Π›Π΅Π²() ΠΈ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°()

Π‘Π°ΠΌΡ‹ΠΉ распространСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ β€” использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π›Π΅Π²() (Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π»Π΅Π²ΠΎΠ΅ подмноТСство символов) вмСстС с Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() (опрСдСляСт Π΄Π»ΠΈΠ½Ρƒ строки). Π›ΠΎΠ³ΠΈΠΊΠ° проста: Π±Π΅Ρ€Π΅ΠΌ строку Π±Π΅Π· послСднСго символа, ΡƒΠΊΠ°Π·Π°Π² Π² Π›Π΅Π²() Π΄Π»ΠΈΠ½Ρƒ исходной строки минус 1.

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

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "ΠŸΡ€ΠΈΠΌΠ΅Ρ€1";

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1); // Π’Π΅Ρ€Π½Π΅Ρ‚ "ΠŸΡ€ΠΈΠΌΠ΅Ρ€"

Π­Ρ‚ΠΎΡ‚ способ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² 99% случаСв, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… нюанса:

  • πŸ”΄ Ошибка ΠΏΡ€ΠΈ пустой строкС: Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΡƒΡΡ‚ΡƒΡŽ строку, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() Π²Π΅Ρ€Π½Π΅Ρ‚ 0, ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1 даст -1. Ѐункция Π›Π΅Π²() Π² этом случаС Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ "НСвСрная Π΄Π»ΠΈΠ½Π° строки".
  • πŸ”΄ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с UTF-8: Π² ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ… символы ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ 2-4 Π±Π°ΠΉΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π° ΠΈΠ»ΠΈ эмодзи). Ѐункция Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() считаСт символы, Π° Π½Π΅ Π±Π°ΠΉΡ‚Ρ‹, Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π΅Π·ΠΊΠ΅ строки Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок, всСгда провСряйтС строку Π½Π° пустоту:

Если Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) > 0 Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1);

Π˜Π½Π°Ρ‡Π΅

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = "";

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ конфигурациях с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ совмСстимости 8.2 функция Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() ΠΌΠΎΠΆΠ΅Ρ‚ вСсти сСбя ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с NULL-значСниями. ΠŸΠ΅Ρ€Π΅Π΄ использованиСм ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ настройку Π Π΅ΠΆΠΈΠΌ совмСстимости Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π±Π°Π·Ρ‹.

2. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°: функция Π‘Ρ€Π΅Π΄()

МСнСС извСстный, Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ эффСктивный способ β€” использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘Ρ€Π΅Π΄(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ подстроку, начиная с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ послСдний символ, достаточно Π²Π·ΡΡ‚ΡŒ подстроку с 1-Π³ΠΎ символа Π΄Π»ΠΈΠ½ΠΎΠΉ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1.

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

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "ВСст@";

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, 1, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1); // Π’Π΅Ρ€Π½Π΅Ρ‚ "ВСст"

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

  • βœ… Π§ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°: явно Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ бСрСтся подстрока с Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ прСдпослСднСго символа.
  • βœ… Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π›Π΅Π²(), Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π² слоТных выраТСниях.

НСдостатки Ρ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ способа: трСбуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΏΡƒΡΡ‚ΡƒΡŽ строку ΠΈ ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ с UTF-8. Однако Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π‘Ρ€Π΅Π΄() ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ быстрСС Π›Π΅Π²() ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈ строками (Π±ΠΎΠ»Π΅Π΅ 10 000 символов), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ создания Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ всСй строки.

πŸ’‘

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅ ΠΎΠ΄ΠΈΠ½, Π° нСсколько послСдних символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 3), просто ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 3 Π² ΠΎΠ±ΠΎΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ….

3. ИспользованиС рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (для 1Π‘ 8.3.10+)

Начиная с вСрсии 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.10, Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ появилась ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ РСгулярноСВыраТСниС. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт Π³ΠΈΠ±ΠΊΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ строки, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ послСднСго символа, с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ слоТных условий.

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

Π Π΅Π³Π’Ρ‹Ρ€ = Новый РСгулярноСВыраТСниС(".$"); // Π¨Π°Π±Π»ΠΎΠ½: любой символ Π² ΠΊΠΎΠ½Ρ†Π΅ строки

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "Π€Π°ΠΉΠ».txt";

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π Π΅Π³Π’Ρ‹Ρ€.Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ""); // Π’Π΅Ρ€Π½Π΅Ρ‚ "Π€Π°ΠΉΠ».tx"

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

  • 🎯 Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ: ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ послСдний символ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ соотвСтствуСт ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли это Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈΠ»ΠΈ запятая).
  • 🌍 ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Unicode: ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ символами.
  • πŸ”„ ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Π°Ρ Π·Π°ΠΌΠ΅Π½Π°: ΠΎΠ΄Π½ΠΈΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ массив строк.

НСдостатки:

  • ⚠️ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: рСгулярныС выраТСния Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ссли Π·Π°Π΄Π°Ρ‡Π° Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π° (ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ любой послСдний символ).
  • πŸ“š Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ знания синтаксиса рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с условиСм (ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний символ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли это запятая):

Π Π΅Π³Π’Ρ‹Ρ€ = Новый РСгулярноСВыраТСниС(",$");

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "Π―Π±Π»ΠΎΠΊΠΈ, Π“Ρ€ΡƒΡˆΠΈ,";

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π Π΅Π³Π’Ρ‹Ρ€.Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ""); // Π’Π΅Ρ€Π½Π΅Ρ‚ "Π―Π±Π»ΠΎΠΊΠΈ, Π“Ρ€ΡƒΡˆΠΈ"

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ вСрсиях 1Π‘ 8.3 Π½ΠΈΠΆΠ΅ 8.3.10 рСгулярныС выраТСния Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ. Attempt to use them will result in a runtime error. Для старых вСрсий ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

4. Π Π°Π±ΠΎΡ‚Π° с массивом символов (для слоТных случаСв)

Если строка содСрТит слоТныС символы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, эмодзи, ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„Ρ‹ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π·Π½Π°ΠΊΠΈ), стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² массив символов с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ послСднСго элСмСнта.

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

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "ΠŸΡ€ΠΈΠ²Π΅Ρ‚πŸ˜Š";

МассивБимволов = Новый Массив;

Для Инд = 1 По Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) Π¦ΠΈΠΊΠ»

МассивБимволов.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Инд, 1));

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Если МассивБимволов.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() > 0 Π’ΠΎΠ³Π΄Π°

МассивБимволов.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(МассивБимволов.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°());

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π‘Ρ‚Ρ€Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ(МассивБимволов, ""); // Π’Π΅Ρ€Π½Π΅Ρ‚ "ΠŸΡ€ΠΈΠ²Π΅Ρ‚"

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚:

  • πŸ‘ ΠœΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ символы (UTF-8, UTF-16).
  • πŸ‘ Π‘ΡƒΡ€Ρ€ΠΎΠ³Π°Ρ‚Π½Ρ‹Π΅ ΠΏΠ°Ρ€Ρ‹ (символы, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ 2 ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² строкС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ эмодзи).
  • πŸ‘ Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ с диакритичСскими Π·Π½Π°ΠΊΠ°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "Γ©", "ΓΌ").

НСдостатки:

  • ⏳ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² массив ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС рСсурсов, Ρ‡Π΅ΠΌ прямыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • πŸ“œ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°: Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС строк ΠΊΠΎΠ΄Π° для Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

Π‘Ρ‚Ρ€ΠΎΠΊΠ° содСрТит эмодзи ΠΈΠ»ΠΈ ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„Ρ‹|НуТно ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ нСсколько послСдних символов ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ|ВрСбуСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа|Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚-->

5. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ послСднСго символа Π² запросС 1Π‘

Если строка обрабатываСтся нСпосрСдствСнно Π² запросС 1Π‘, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π›Π•Π’() прямо Π² тСкстС запроса. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ прямо ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅, Π½Π΅ прибСгая ΠΊ пост-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π° сторонС 1Π‘.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса:

ВЫБРАВЬ

Π›Π•Π’(ΠŸΠΎΠ»Π΅Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Π’Π Π”Π›Π˜ΠΠ(ΠŸΠΎΠ»Π΅Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1) КАК ΠžΡ‡ΠΈΡ‰Π΅Π½Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°

Π˜Π—

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.ΠœΠΎΠΉΠ”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² запросах:

  • πŸ“Š ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ: Ссли строка хранится Π² Π±Π°Π·Π΅ с лишним символом (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ), очистка Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ SQL-запроса снизит Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° сСрвСр.
  • πŸ” ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ: Π² запросах нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Если для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄Π»ΠΈΠ½Ρ‹ строки. Если ΠΏΠΎΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ условиС Π“Π”Π• Π‘Π’Π Π”Π›Π˜ΠΠ(ΠŸΠΎΠ»Π΅Π‘Ρ‚Ρ€ΠΎΠΊΠ°) > 0.
  • πŸ›  Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ: синтаксис Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π›Π•Π’() ΠΈ Π‘Π’Π Π”Π›Π˜ΠΠ() Π² запросах ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ встроСнному языку 1Π‘.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с условиСм:

ВЫБРАВЬ

Π›Π•Π’(ΠŸΠΎΠ»Π΅Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Π’Π Π”Π›Π˜ΠΠ(ΠŸΠΎΠ»Π΅Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1) КАК ΠžΡ‡ΠΈΡ‰Π΅Π½Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°

Π˜Π—

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.ΠœΠΎΠΉΠ”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

Π“Π”Π•

Π‘Π’Π Π”Π›Π˜ΠΠ(ΠŸΠΎΠ»Π΅Π‘Ρ‚Ρ€ΠΎΠΊΠ°) > 0

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π‘Π£Π‘Π” (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PostgreSQL) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΡŽΠ°Π½ΡΡ‹ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ. Если послС выполнСния запроса символы ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ настройки ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ соСдинСния с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²: ΠΊΠ°ΠΊΠΎΠΉ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ?

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° зависит ΠΎΡ‚ контСкста Π·Π°Π΄Π°Ρ‡ΠΈ, вСрсии 1Π‘ ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ сравнСниС всСх рассмотрСнных способов:

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° вСрсий Π Π°Π±ΠΎΡ‚Π° с UTF-8 ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
Π›Π΅Π²() + Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() ВсС вСрсии Частично (риск Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ²) ⭐⭐⭐⭐⭐ ⭐
Π‘Ρ€Π΅Π΄() ВсС вСрсии Частично ⭐⭐⭐⭐⭐ ⭐
РСгулярныС выраТСния 8.3.10+ Полная ⭐⭐ ⭐⭐⭐
Массив символов ВсС вСрсии Полная ⭐ ⭐⭐⭐⭐
ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² запросС ВсС вСрсии Зависит ΠΎΡ‚ Π‘Π£Π‘Π” ⭐⭐⭐⭐ ⭐⭐

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ:

  • πŸ† Для простых Π·Π°Π΄Π°Ρ‡: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π›Π΅Π²() ΠΈΠ»ΠΈ Π‘Ρ€Π΅Π΄() с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Π½Π° ΠΏΡƒΡΡ‚ΡƒΡŽ строку.
  • 🌐 Для ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… строк: массив символов ΠΈΠ»ΠΈ рСгулярныС выраТСния (Ссли вСрсия 1Π‘ позволяСт).
  • πŸ“ˆ Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…: ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² запросС снизит Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° сСрвСр.
πŸ’‘

Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π·Π°Π΄Π°Ρ‡ Π² 1Π‘ 8.3 ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ остаСтся комбинация Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1) с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Π½Π° пустоту. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ сочСтаСт простоту, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

Π”Π°ΠΆΠ΅ Π² простой Π·Π°Π΄Π°Ρ‡Π΅ удалСния послСднСго символа Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки, Π²Π΅Π΄ΡƒΡ‰ΠΈΠ΅ ΠΊ падСниям ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ. Рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС случаи:

1. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΏΡƒΡΡ‚ΡƒΡŽ строку

Код:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1); // Ошибка, Ссли Π‘Ρ‚Ρ€ΠΎΠΊΠ° = ""

РСшСниС: всСгда добавляйтС условиС:

Если Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) > 0 Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1);

Π˜Π½Π°Ρ‡Π΅

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = "";

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

2. НСучСт символов пСрСноса строки

Если строка заканчиваСтся символом пСрСноса (Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹.ПБ), Π΅Π³ΠΎ Ρ‚ΠΎΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ. НапримСр:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "ΠŸΡ€ΠΈΠ²Π΅Ρ‚" + Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹.ПБ;

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1); // Π£Π΄Π°Π»ΠΈΡ‚ ПБ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ символ

3. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с NULL-значСниями

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… конфигурациях поля Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ NULL. ΠŸΡ€ΡΠΌΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ строковых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊ NULL Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. РСшСниС:

Если Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

4. НСкоррСктная Ρ€Π°Π±ΠΎΡ‚Π° с UTF-8

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "ΠŸΡ€ΠΈΠ²Π΅Ρ‚πŸ˜Š"; // Π­ΠΌΠΎΠ΄Π·ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 Π±Π°ΠΉΡ‚Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1); // ΠœΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ "ΠŸΡ€ΠΈΠ²Π΅Ρ‚οΏ½" (ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ символ)

РСшСниС: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ массив символов ΠΈΠ»ΠΈ рСгулярныС выраТСния.

5. Ошибки Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ массива строк

Если Π²Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ массив строк, Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ:

Для КаТдого Π‘Ρ‚Ρ€ Из ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ Π¦ΠΈΠΊΠ»

Π‘Ρ‚Ρ€ = Π›Π΅Π²(Π‘Ρ‚Ρ€, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€) - 1); // Ошибка, Ссли Π‘Ρ‚Ρ€ пустая

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π›ΡƒΡ‡ΡˆΠ΅:

Для КаТдого Π‘Ρ‚Ρ€ Из ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ Π¦ΠΈΠΊΠ»

Если Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€) > 0 Π’ΠΎΠ³Π΄Π°

Π‘Ρ‚Ρ€ = Π›Π΅Π²(Π‘Ρ‚Ρ€, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€) - 1);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠŸΠΎΡ‡Π΅ΠΌΡƒ функция Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ€Π°Ρ‚ΡŒ?

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, UTF-16) функция Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ, Π° Π½Π΅ Π±Π°ΠΉΡ‚. Для символов, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… 2 ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ (суррогатныС ΠΏΠ°Ρ€Ρ‹), Π΄Π»ΠΈΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Ρ‹ΡˆΠ΅Π½Π°. НапримСр, строка "A😊B" ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ 3 (A, 😊, B), Π½ΠΎ Π² памяти Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 5 Π±Π°ΠΉΡ‚ (1 + 4 + 1 Π² UTF-8).

FAQ: ЧастыС вопросы

МоТно Π»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний символ Π±Π΅Π· использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ?

ВСхничСски Π΄Π°, Π½ΠΎ это нСцСлСсообразно. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний Π±Π°ΠΉΡ‚ ΠΈ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ‡Ρ€Π΅Π²Π°Ρ‚ ошибками ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ слоТСн Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π›Π΅Π²()/Π‘Ρ€Π΅Π΄() Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅ ΠΈ ΠΏΡ€ΠΎΡ‰Π΅.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ послС удалСния послСднСго символа Π² строкС ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ кракозябры?

Π­Ρ‚ΠΎ типичная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (UTF-8, UTF-16). Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ эмодзи ΠΈΠ»ΠΈ ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„ΠΎΠ² Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ нСсколько Π±Π°ΠΉΡ‚, ΠΈ ΠΎΠ±Ρ€Π΅Π·ΠΊΠ° строки ΠΏΠΎ Π±Π°ΠΉΡ‚Π°ΠΌ (Π° Π½Π΅ ΠΏΠΎ символам) ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ. РСшСниС: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ массив символов ΠΈΠ»ΠΈ рСгулярныС выраТСния (для 1Π‘ 8.3.10+).

Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний символ Π² строкС, Ссли это запятая ΠΈΠ»ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ рСгулярныС выраТСния (для 1Π‘ 8.3.10+) ΠΈΠ»ΠΈ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:

ПослСднийБимвол = ΠŸΡ€Π°Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, 1);

Если ПослСднийБимвол = "," Или ПослСднийБимвол = "." Π’ΠΎΠ³Π΄Π°

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

Π•ΡΡ‚ΡŒ Π»ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, N) ΠΈ Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, 1, N)?

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π½Π΅Ρ‚ β€” ΠΎΠ±Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ N символов строки. Однако Π‘Ρ€Π΅Π΄() Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ позволяСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ. По ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π½Π΅Ρ‚, Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»ΡƒΡ‡ΡˆΠ΅ читаСтся Π² вашСм ΠΊΠΎΠ΄Π΅.

Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний символ Π² строкС, которая хранится Π² ΠΏΠΎΠ»Π΅ справочника?

Если ΠΏΠΎΠ»Π΅ справочника ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ любой ΠΈΠ· описанных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΈ записи:

ΠžΠ±ΡŠΠ΅ΠΊΡ‚.ΠŸΠΎΠ»Π΅Π‘Ρ‚Ρ€ΠΎΠΊΠ° = Π›Π΅Π²(ΠžΠ±ΡŠΠ΅ΠΊΡ‚.ΠŸΠΎΠ»Π΅Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(ΠžΠ±ΡŠΠ΅ΠΊΡ‚.ΠŸΠΎΠ»Π΅Π‘Ρ‚Ρ€ΠΎΠΊΠ°) - 1);

ΠžΠ±ΡŠΠ΅ΠΊΡ‚.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ();

Если ΠΏΠΎΠ»Π΅ Π½Π΅Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ ΠΈΠ»ΠΈ вычисляСмоС, очистку Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΠ»ΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.