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

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ 5 Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… способов Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ строку ΠΏΠΎ Π±ΡƒΠΊΠ²Π°ΠΌ β€” ΠΎΡ‚ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄ΠΎ Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ€Π΅Π΄ΠΊΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Unicode-символами. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… символов (ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π°, эмодзи), Π³Π΄Π΅ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ протСстированы Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.20+.

1. Бтандартная функция Π‘Ρ€Π΅Π΄() β€” ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ

Π‘Π°ΠΌΡ‹ΠΉ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ β€” использованиС встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘Ρ€Π΅Π΄(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ подстроку Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ начиная с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Для извлСчСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… символов достаточно Π·Π°Π΄Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ подстроки Ρ€Π°Π²Π½ΠΎΠΉ 1.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для строки "ΠŸΡ€ΠΈΠ²Π΅Ρ‚":

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

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

Π‘ΠΈΠΌΠ²ΠΎΠ» = Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Инд, 1);

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π‘ΠΈΠΌΠ²ΠΎΠ»); // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚: П, Ρ€, ΠΈ, Π², Π΅, Ρ‚

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

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

  • πŸ”Ή ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° β€” Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ»ΠΈ слоТной Π»ΠΎΠ³ΠΈΠΊΠΈ
  • πŸ”Ή Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΠΎ всСх вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅
  • πŸ”Ή ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Unicode-символы (Ссли ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ настроСна)

Однако Π΅ΡΡ‚ΡŒ ΠΈ ограничСния. Ѐункция Π‘Ρ€Π΅Π΄() создаСт Π½ΠΎΠ²ΡƒΡŽ строку Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… тСкстов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ >10 Кб). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, для пустых строк ΠΈΠ»ΠΈ строк с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ Ρ†ΠΈΠΊΠ» Π½Π΅ выполнится Π½ΠΈ Ρ€Π°Π·Ρƒ β€” это Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ.

πŸ’‘

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ символы Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) ΠΊΠ°ΠΊ ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΠΉΡ‚Π΅ индСкс Π² Ρ†ΠΈΠΊΠ»Π΅: Для Инд = Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) По 1 Π¦ΠΈΠΊΠ»

2. ИспользованиС массива Π±Π°ΠΉΡ‚ΠΎΠ² β€” для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Для Π·Π°Π΄Π°Ρ‡, Π³Π΄Π΅ Π²Π°ΠΆΠ½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ трСбуСтся Ρ€Π°Π±ΠΎΡ‚Π° с Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΎΠ±ΠΌΠ΅Π½Π°), ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку Π² массив Π±Π°ΠΉΡ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ‘Π°ΠΉΡ‚Ρ‹(). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡƒΡ‡Π΅Ρ‚Π° ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для строки "АБВ" Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ UTF-8:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "АБВ";

Π‘Π°ΠΉΡ‚Ρ‹ = ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ‘Π°ΠΉΡ‚Ρ‹(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "UTF-8");

// Для кирилличСских символов Π² UTF-8 ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 Π±Π°ΠΉΡ‚Π°

Для Инд = 0 По Π‘Π°ΠΉΡ‚Ρ‹.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¨Π°Π³ 2 Π¦ΠΈΠΊΠ»

Π‘ΠΈΠΌΠ²ΠΎΠ» = Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, (Инд/2) + 1, 1);

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π‘ΠΈΠΌΠ²ΠΎΠ»); // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚: А, Π‘, Π’

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

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

  • πŸ”Ή ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π°: для Windows-1251 ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 1 Π±Π°ΠΉΡ‚, для UTF-8 β€” 2 Π±Π°ΠΉΡ‚Π° (для ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹)
  • πŸ”Ή ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ BOM-ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ ΠΈ Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅ символы
  • πŸ”Ή ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм)
Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ?

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ функция ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ‘Π°ΠΉΡ‚Ρ‹() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ сСссии. Для российских ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Windows-1251, Π½ΠΎ Π² Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΈΠ»ΠΈ Ρ‚ΠΎΠ½ΠΊΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. НСсоотвСтствиС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ искаТСнию ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, кирилличСскиС Π±ΡƒΠΊΠ²Ρ‹ прСвратятся Π² "кракозябры").

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π²Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, с ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° трСбуСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π°ΠΉΡ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ). Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π·Π°Π΄Π°Ρ‡ парсинга тСкста ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ бСзопаснСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π‘Ρ€Π΅Π΄().

3. РСгулярныС выраТСния β€” для слоТных шаблонов

Если строка содСрТит ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΡƒΠΊΠ²Ρ‹ ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹) ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ символы, ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСгулярныС выраТСния. Π’ 1Π‘ для этого Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ РСгулярноСВыраТСниС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΡƒΠΊΠ²Ρ‹ ΠΈΠ· строки "Π 1А2Π—3Π‘4И5Π’6":

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "Π 1А2Π—3Π‘4И5Π’6";

Π Π’ = Новый РСгулярноСВыраТСниС("[А-Π―Π°-я]");

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π Π’.НайтиВсС(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

Для КаТдого НайдСнный Из Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(НайдСнный.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅); // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚: Π , А, Π—, Π‘, И, Π’

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

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

  • πŸ”Ή Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ β€” ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ слоТныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "[А-Π―]{2}\d{3}" для поиска сСрий паспортов)
  • πŸ”Ή ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Unicode-Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, [\p{L}] для всСх Π±ΡƒΠΊΠ²)
  • πŸ”Ή Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ извлСчСния Π³Ρ€ΡƒΠΏΠΏ символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми)

НСдостатки:

  • πŸ”Έ Π‘ΠΎΠ»Π΅Π΅ высокоС ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π‘Ρ€Π΅Π΄()
  • πŸ”Έ Бинтаксис рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ изучСния
  • πŸ”Έ Π’ старых вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ (Π΄ΠΎ 8.3.10) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Unicode Π² рСгулярках Π±Ρ‹Π»Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°
  • πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π·Π±ΠΎΡ€Π° строк Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
    Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π‘Ρ€Π΅Π΄, Π›Π΅Π², ΠŸΡ€Π°Π²)
    РСгулярныС выраТСния
    Π¦ΠΈΠΊΠ»Ρ‹ с массивами
    Π”Ρ€ΡƒΠ³ΠΈΠ΅ способы

    4. Π¦ΠΈΠΊΠ» ΠΏΠΎ символам с использованиСм Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ

    Для Π·Π°Π΄Π°Ρ‡, Π³Π΄Π΅ Π²Π°ΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ символы, Π½ΠΎ ΠΈ ΠΈΡ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими тСкстами, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ создания подстрок.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ строки "1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅":

    Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅";
    

    Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

    Пока Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ‘ΠΈΠΌΠ²ΠΎΠ»() <> "" Π¦ΠΈΠΊΠ»

    Π‘ΠΈΠΌΠ²ΠΎΠ» = Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ВСкстБимвола;

    ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ;

    Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°(Π‘ΠΈΠΌΠ²ΠΎΠ», ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ)); // Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄

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

    ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

    • πŸ”Ή Экономия памяти: Π½Π΅ создаСт ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ строки
    • πŸ”Ή Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ (позиция, Π΄Π»ΠΈΠ½Π° символа Π² Π±Π°ΠΉΡ‚Π°Ρ…)
    • πŸ”Ή ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΡŽ ΠΏΠΎ строкС Π² ΠΎΠ±Π΅ стороны

    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Ссли:|НуТно ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ строки >1000 символов|Π’Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ символов|ВрСбуСтся ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±Ρ…ΠΎΠ΄ строки|НуТно ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ символов Π² Π±Π°ΠΉΡ‚Π°Ρ…-->

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.2 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Unicode-символами, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΌΠΈ Π±ΠΎΠ»Π΅Π΅ 2 Π±Π°ΠΉΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, эмодзи). Π’ Ρ‚Π°ΠΊΠΈΡ… случаях рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

    5. Π Π°Π·Π±ΠΎΡ€ строки Π² массив β€” для дальнСйшСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

    Если конСчная Ρ†Π΅Π»ΡŒ β€” Π½Π΅ просто вывСсти символы, Π° ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡ… для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ»ΠΈ прСобразования), ΡƒΠ΄ΠΎΠ±Π½ΠΎ сразу ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ символы Π² массив. Π­Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с коллСкциями.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания массива символов ΠΈΠ· строки "Массив":

    Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "Массив";
    

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

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

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

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

    // Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с массивом:

    // МассивБимволов[0] = "М", МассивБимволов[1] = "Π°" ΠΈ Ρ‚.Π΄.

    ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅:

    • πŸ”Ή Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π°Π½Π°Π³Ρ€Π°ΠΌΠΌ)
    • πŸ”Ή Поиск Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… символов
    • πŸ”Ή ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ рСгистра для всСх символов сразу

    Для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ строки ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°:

    МассивБимволов = Новый Массив(Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°));
    πŸ’‘

    ИспользованиС массивов ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ символам ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС "Π°" Π½Π° "ΠΎ"). Π­Ρ‚ΠΎ избавляСт ΠΎΡ‚ нСобходимости ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ исходной строкС.

    Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²: ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ примСнСния

    Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… характСристик:

    ΠœΠ΅Ρ‚ΠΎΠ΄ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Unicode Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
    Π‘Ρ€Π΅Π΄() БрСдняя Π”Π° Низкая ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ строки
    Массив Π±Π°ΠΉΡ‚ΠΎΠ² Высокая Π”Π° (ΠΏΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅) Высокая НизкоуровнСвая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅
    РСгулярныС выраТСния Низкая Π”Π° БрСдняя Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ символов
    Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Высокая Π”Π° БрСдняя Π”Π»ΠΈΠ½Π½Ρ‹Π΅ строки, Π½ΡƒΠΆΠ½Ρ‹ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ символов
    Массив символов БрСдняя Π”Π° Низкая ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° символов ΠΊΠ°ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

    Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π·Π°Π΄Π°Ρ‡ Π² 1Π‘ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ комбинация Π‘Ρ€Π΅Π΄() для простых случаСв ΠΈ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большими тСкстами. РСгулярныС выраТСния стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° трСбуСтся Π³ΠΈΠ±ΠΊΠΈΠΉ поиск ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ.

    πŸ’‘

    Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ строку ΠΏΠΎ словам (Π° Π½Π΅ ΠΏΠΎ Π±ΡƒΠΊΠ²Π°ΠΌ), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒΠ’ΠœΠ°ΡΡΠΈΠ²ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊ() с Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ " ". Π­Ρ‚ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ ΠΎΡ‚ нСобходимости ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ Π·Π½Π°ΠΊΠΎΠ² прСпинания.

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

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

    1. НСучСт пустых строк:

    Если Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ строки ΠΏΠ΅Ρ€Π΅Π΄ Ρ†ΠΈΠΊΠ»ΠΎΠΌ, ΠΊΠΎΠ΄ ΡƒΠΏΠ°Π΄Π΅Ρ‚ с ошибкой "ИндСкс Π²Π½Π΅ Π³Ρ€Π°Π½ΠΈΡ† массива". ВсСгда добавляйтС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ:

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

    Π’ΠΎΠ·Π²Ρ€Π°Ρ‚;

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

    2. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ:

    ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Unicode-строками (особСнно с эмодзи ΠΈΠ»ΠΈ Ρ€Π΅Π΄ΠΊΠΈΠΌΠΈ символами) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ€ΠΎΠ΄Π΅ Π‘Ρ€Π΅Π΄() ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹Π΅ символы. НапримСр, символ "😊" Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 4 Π±Π°ΠΉΡ‚Π° Π² UTF-8, ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π΅Π³ΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π°ΠΉΡ‚Ρƒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ искаТСнию.

    Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ строки?

    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ():

    Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°)); // Π’Π΅Ρ€Π½Π΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "utf-8"

    Если функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ строку, ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° совпадаСт с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ сСанса.

    3. Ошибки с индСксациСй:

    Π’ 1Π‘ индСксация символов Π² строкС начинаСтся с 1, Π° Π½Π΅ с 0 (ΠΊΠ°ΠΊ Π² ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках). Π­Ρ‚ΠΎ часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкам ΠΏΡ€ΠΈ ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°. НапримСр, Ρ†ΠΈΠΊΠ» Для Инд = 0 По Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) пропустит ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π½Π° послСднСй ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

    πŸ’‘

    ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() для опрСдСлСния Π³Ρ€Π°Π½ΠΈΡ† Ρ†ΠΈΠΊΠ»Π°, Π° Π½Π΅ ТСстко Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ значСния. Π­Ρ‚ΠΎ сдСлаСт ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ ΠΎΡ‚ ошибок ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π»ΠΈΠ½Ρ‹ строки.

    4. НСэффСктивныС Ρ†ΠΈΠΊΠ»Ρ‹:

    Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΏΠΎ строкам (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для сравнСния Π΄Π²ΡƒΡ… строк посимвольно). Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ сильно Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ массивы ΠΈΠ»ΠΈ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ.

    ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.2 ΠΈ Π½ΠΈΠΆΠ΅ функция Π‘Ρ€Π΅Π΄() ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с символами, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΌΠΈ Π±ΠΎΠ»Π΅Π΅ 2 Π±Π°ΠΉΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„Ρ‹ ΠΈΠ»ΠΈ эмодзи). Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ‘Π°ΠΉΡ‚Ρ‹() с явным ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ UTF-8.

    FAQ: ЧастыС вопросы ΠΏΠΎ Ρ€Π°Π·Π±ΠΎΡ€Ρƒ строк

    МоТно Π»ΠΈ Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ строку ΠΏΠΎ Π±ΡƒΠΊΠ²Π°ΠΌ Π±Π΅Π· Ρ†ΠΈΠΊΠ»Π°?

    Π”Π°, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ косвСнно. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку Π² массив Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π°ΠΉΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² символ. Однако это Π½Π΅ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ ΠΎΡ‚ нСявных Ρ†ΠΈΠΊΠ»ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ 1Π‘. ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ строк Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ β€” это Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ опСрация.

    Как Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ строку ΠΏΠΎ Π±ΡƒΠΊΠ²Π°ΠΌ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС?

    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» с ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‰ΠΈΠΌΡΡ счСтчиком:

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

    Π‘ΠΈΠΌΠ²ΠΎΠ» = Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Инд, 1);

    Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π‘ΠΈΠΌΠ²ΠΎΠ»);

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

    Или Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ() для рСвСрса всСй строки ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ.

    ΠŸΠΎΡ‡Π΅ΠΌΡƒ функция Π‘Ρ€Π΅Π΄() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ строку для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… символов?

    Π­Ρ‚ΠΎ происходит Ссли:

    1. Π’Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ символ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ строки (индСкс > Π΄Π»ΠΈΠ½Ρ‹ строки)
    2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° содСрТит Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅ символы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π§Ρ€(10) β€” ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки)
    3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСвСрная ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°, ΠΈ функция "Ρ€Π΅ΠΆΠ΅Ρ‚" ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ символ

    ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΄Π»ΠΈΠ½Ρƒ строки ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ().

    Как Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ строку ΠΏΠΎ Π±ΡƒΠΊΠ²Π°ΠΌ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ рСгистра?

    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π’Π Π΅Π³() ΠΈΠ»ΠΈ НРСг() послС извлСчСния символа:

    Π‘ΠΈΠΌΠ²ΠΎΠ» = Π’Π Π΅Π³(Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Инд, 1)); // ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр

    Если Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ рСгистр, Π½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

    Если НРСг(Π‘ΠΈΠΌΠ²ΠΎΠ») = НРСг("А") Π’ΠΎΠ³Π΄Π°...

    МоТно Π»ΠΈ Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ строку ΠΏΠΎ Π±ΡƒΠΊΠ²Π°ΠΌ Π² запросС 1Π‘?

    НСт, Π² языкС запросов 1Π‘ Π½Π΅Ρ‚ инструмСнтов для посимвольного Ρ€Π°Π·Π±ΠΎΡ€Π° строк. ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π° встроСнном языкС. Однако Π² запросС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π›Π•Π’, ΠŸΠ ΠΠ’ ΠΈ Π‘Π Π•Π” для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с подстроками фиксированной Π΄Π»ΠΈΠ½Ρ‹.