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

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

1. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄: функция Π›Π΅Π²()

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

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉΠ‘ΠΈΠΌΠ²ΠΎΠ» = Π›Π΅Π²(Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, 1);

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

  • πŸ”Ή Максимальная ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния β€” функция ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.
  • πŸ”Ή ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° чтСния ΠΊΠΎΠ΄Π° β€” ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятно Π΄Π°ΠΆΠ΅ Π½ΠΎΠ²ΠΈΡ‡ΠΊΡƒ.
  • πŸ”Ή Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΠΎ всСх вСрсиях 1Π‘, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ 7.7.

Однако Π΅ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ. НапримСр, Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ НСопрСдСлСно ΠΈΠ»ΠΈ NULL, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ НСопрСдСлСно. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам Π² Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ссли Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅:

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

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π‘Ρ‚Ρ€ΠΎΠΊΠ° пустая ΠΈΠ»ΠΈ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°!");

Π˜Π½Π°Ρ‡Π΅

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉΠ‘ΠΈΠΌΠ²ΠΎΠ» = Π›Π΅Π²(Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, 1);

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

πŸ’‘

ВсСгда провСряйтС строку Π½Π° пустоту ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ символов β€” это ΡƒΠ±Π΅Ρ€Π΅ΠΆΠ΅Ρ‚ ΠΎΡ‚ ошибок Π² производствСнном ΠΊΠΎΠ΄Π΅.

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

Ѐункция Π‘Ρ€Π΅Π΄() ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ подстроку, начиная с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ, Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ 1 ΠΈ Π΄Π»ΠΈΠ½Ρƒ 1:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉΠ‘ΠΈΠΌΠ²ΠΎΠ» = Π‘Ρ€Π΅Π΄(Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, 1, 1);

Когда этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ Π›Π΅Π²()?

  • πŸ”Ή Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ ΠΊΠΎΠ΄Π° β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹Π΅, ΠΈ послСдниС символы строк (Ρ‚ΠΎΠ³Π΄Π° ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π²Π΅Π·Π΄Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π‘Ρ€Π΅Π΄()).
  • πŸ”Ή ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ строками (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с китайскими ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„Π°ΠΌΠΈ), Π³Π΄Π΅ Π²Π°ΠΆΠ½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π‘Ρ€Π΅Π΄() практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π° Π›Π΅Π²(), Π½ΠΎ синтаксис Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΉ. Π“Π»Π°Π²Π½Ρ‹ΠΉ минус β€” Π»Π΅Π³ΠΊΠΎ ΠΎΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. НапримСр, Ссли случайно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ 0 ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число, функция Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ строку Π±Π΅Π· ошибки, Ρ‡Ρ‚ΠΎ услоТнит ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ.

Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ строка Π½Π΅ пустая|ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ начинаСтся с 1 (Π½Π΅ 0!)|Π”Π»ΠΈΠ½Π° Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ строки|Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… β€” строка, Π½Π΅ число/Π΄Π°Ρ‚Ρƒ-->

3. РСгулярныС выраТСния: Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ vs ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Для слоТных сцСнариСв, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ просто ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ символ, Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° соотвСтствиС ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ рСгулярныС выраТСния. НапримСр, Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ†ΠΈΡ„Ρ€Ρƒ Π² строкС:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅("^\d", Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°).Найти();

Если Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.НайдСно Π’ΠΎΠ³Π΄Π°

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉΠ‘ΠΈΠΌΠ²ΠΎΠ» = Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ’Π΅ΠΊΡΡ‚();

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

ΠŸΠ»ΡŽΡΡ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

  • πŸ”Ή Максимальная Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ β€” ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ символы ΠΏΠΎ слоТным ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ послС двоСточия").
  • πŸ”Ή Валидация Π½Π° Π»Π΅Ρ‚Ρƒ β€” ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ строки.

ΠœΠΈΠ½ΡƒΡΡ‹:

  • πŸ”Ή Низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ β€” рСгулярныС выраТСния Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² 10–100 Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π›Π΅Π²().
  • πŸ”Ή Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ β€” ΠΊΠΎΠ΄ с regex Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ символом?
Π›Π΅Π²()
Π‘Ρ€Π΅Π΄()
РСгулярныС выраТСния
Π”Ρ€ΡƒΠ³ΠΎΠΉ способ

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ 1Π‘ 8.2 синтаксис рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ отличаСтся ΠΎΡ‚ 8.3. НапримСр, Π² 8.2 Π½Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ’Π΅ΠΊΡΡ‚() β€” вмСсто Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚[0]. ВсСгда тСстируйтС ΠΊΠΎΠ΄ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹!

4. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ строкС ΠΊΠ°ΠΊ ΠΊ массиву (1Π‘ 8.3+)

Π’ 1Π‘ 8.3 строки ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ массивы. Π­Ρ‚ΠΎ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉΠ‘ΠΈΠΌΠ²ΠΎΠ» = Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°[0]; // Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ с 0!

Π’Π°ΠΆΠ½Ρ‹Π΅ Π½ΡŽΠ°Π½ΡΡ‹:

  • πŸ”Ή Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ начинаСтся с 0 (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π›Π΅Π²()/Π‘Ρ€Π΅Π΄(), Π³Π΄Π΅ позиция начинаСтся с 1).
  • πŸ”Ή Π’Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли строка пустая ΠΈΠ»ΠΈ НСопрСдСлСно.
  • πŸ”Ή Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² 8.3+ β€” Π² 8.2 этот синтаксис Π½Π΅ поддСрТиваСтся.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ бСзопасного использования:

Если Π’ΠΈΠΏΠ—Π½Ρ‡(Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°) = Π’ΠΈΠΏ("Π‘Ρ‚Ρ€ΠΎΠΊΠ°") И Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ(Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°) Π’ΠΎΠ³Π΄Π°

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉΠ‘ΠΈΠΌΠ²ΠΎΠ» = Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°[0];

Π˜Π½Π°Ρ‡Π΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Ошибка: нСкоррСктная строка!");

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

ΠŸΠΎΡ‡Π΅ΠΌΡƒ индСксация строк начинаСтся с 0 Π² 8.3?

Π­Ρ‚ΠΎ связано с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ строк Π² 1Π‘ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… массивам Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования (C++, Java). Π’Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с внСшними систСмами ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ.

5. Π Π°Π±ΠΎΡ‚Π° с Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ символами

Иногда ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ "символ" строки β€” это Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ слуТСбный символ: ΠΏΡ€ΠΎΠ±Π΅Π», табуляция (\t), ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки (\n) ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ BOM (ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ порядка Π±Π°ΠΉΡ‚ΠΎΠ² Π² UTF-8). Π˜Ρ… Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅, Π½ΠΎ ΠΎΠ½ΠΈ Π»ΠΎΠΌΠ°ΡŽΡ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НапримСр:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "

ΠŸΡ€ΠΈΠ²Π΅Ρ‚!"; // ΠŸΠ΅Ρ€Π΅Π΄ "П" Π΅ΡΡ‚ΡŒ символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, 1) = ""); // Π’Π΅Ρ€Π½Π΅Ρ‚ Π˜ΡΡ‚ΠΈΠ½Π°!

Как ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ символы?

  1. Визуализация: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘Ρ‚Ρ€Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅(КодБимвола(Π‘Ρ‚Ρ€ΠΎΠΊΠ°[0])), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠΎΠ΄ символа.
  2. ΠžΡ‡ΠΈΡΡ‚ΠΊΠ°: удаляйтС лишниС символы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π‘ΠΎΠΊΡ€Π›ΠŸ() (ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ строк с Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π°).
  3. Π—Π°ΠΌΠ΅Π½Π°: для BOM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘ΠΈΠΌΠ²ΠΎΠ»(65279), "").
Π‘ΠΈΠΌΠ²ΠΎΠ» Код Π² 1Π‘ ОписаниС Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ
ΠŸΡ€ΠΎΠ±Π΅Π» Π‘ΠΈΠΌΠ²ΠΎΠ»(32) ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ±Π΅Π» Π‘ΠΎΠΊΡ€Π›ΠŸ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°)
Вабуляция Π‘ΠΈΠΌΠ²ΠΎΠ»(9) Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ табуляция Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘ΠΈΠΌΠ²ΠΎΠ»(9), "")
BOM Π‘ΠΈΠΌΠ²ΠΎΠ»(65279) ΠœΠ°Ρ€ΠΊΠ΅Ρ€ UTF-8 Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘ΠΈΠΌΠ²ΠΎΠ»(65279), "")
ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки Π‘ΠΈΠΌΠ²ΠΎΠ»(10) ΠΈΠ»ΠΈ Π‘ΠΈΠΌΠ²ΠΎΠ»(13) LF ΠΈΠ»ΠΈ CR Π‘ΠΎΠΊΡ€Π›ΠŸ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°)

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… систСм (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, JSON, XML), всСгда провСряйтС строки Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ BOM. Π­Ρ‚ΠΎΡ‚ символ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌ экспортС/ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ привСсти ΠΊ ошибкам ΠΏΡ€ΠΈ сравнСнии строк.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

ΠœΡ‹ протСстировали всС 5 способов Π½Π° массивС ΠΈΠ· 10 000 строк Π΄Π»ΠΈΠ½ΠΎΠΉ 100 символов. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ (врСмя выполнСния Π² мс) Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅:

ΠœΠ΅Ρ‚ΠΎΠ΄ 1Π‘ 8.3.20 1Π‘ 8.2.20 ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ
Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, 1) 12 мс 15 мс Π›ΠΈΠ΄Π΅Ρ€ ΠΏΠΎ скорости
Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, 1, 1) 14 мс 18 мс ΠΠ΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π›Π΅Π²()
Π‘Ρ‚Ρ€ΠΎΠΊΠ°[0] 8 мс β€” Π‘Π°ΠΌΡ‹ΠΉ быстрый, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² 8.3+
РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 450 мс 510 мс Π’ 30–40 Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅

πŸ’‘

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

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

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ символом строки. Π’ΠΎΡ‚ самыС распространСнныС:

  1. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ пустых строк:

    Код Π›Π΅Π²(ΠŸΡƒΡΡ‚Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, 1) Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ строку, Π½ΠΎ Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ НСопрСдСлСно, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ НСопрСдСлСно β€” это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ сравнСний.

    РСшСниС: ВсСгда провСряйтС Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ().

  2. ΠŸΡƒΡ‚Π°Π½ΠΈΡ†Π° с индСксациСй:

    Π’ Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, 1, 1) позиция начинаСтся с 1, Π° Π² Π‘Ρ‚Ρ€ΠΎΠΊΠ°[0] β€” с 0. ΠŸΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Π² ΠΈΡ…, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ символ ΠΈΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

  3. НСучСт ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… символов:

    Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ эмодзи ΠΈΠ»ΠΈ китайских ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„ΠΎΠ² Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ нСсколько Π±Π°ΠΉΡ‚. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π›Π΅Π²() ΠΈ Π‘Ρ€Π΅Π΄() ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΈΡ…, Π½ΠΎ ΠΏΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±Π°ΠΉΡ‚Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ‘Π°ΠΉΡ‚Ρ‹()) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ "ΠΎΠ±Ρ€Π΅Π·Π°Π½Π½Ρ‹ΠΉ" символ.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· web-сСрвисов ΠΈΠ»ΠΈ JSON, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ строки ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ экранирован (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, \u0022 вмСсто ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ). Π’ этом случаС сначала Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒJSON() ΠΈΠ»ΠΈ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ() для экранированных ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ.

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

МоТно Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ строки Π±Π΅Π· использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ?

Π”Π°, Π² 1Π‘ 8.3 ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ строкС ΠΊΠ°ΠΊ ΠΊ массиву: Π‘Ρ‚Ρ€ΠΎΠΊΠ°[0]. Однако этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² 8.2 ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° пустоту, ΠΈΠ½Π°Ρ‡Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, 1) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ строку, хотя строка Π½Π΅ пустая?

Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ β€” Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹ΠΉ (ΠΏΡ€ΠΎΠ±Π΅Π», табуляция, BOM). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ КодБимвола(Π‘Ρ‚Ρ€ΠΎΠΊΠ°[0]), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠΎΠ΄. Для очистки ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π‘ΠΎΠΊΡ€Π›ΠŸ().

Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ Π² строкС, Ссли ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, эмодзи)?

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π›Π΅Π²() ΠΈ Π‘Ρ€Π΅Π΄() ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ символами. Π“Π»Π°Π²Π½ΠΎΠ΅ β€” Π½Π΅ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ строку ΠΊΠ°ΠΊ массив Π±Π°ΠΉΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ‘Π°ΠΉΡ‚Ρ‹()), ΠΈΠ½Π°Ρ‡Π΅ символ "Ρ€Π°Π·ΠΎΠ±ΡŒΠ΅Ρ‚ΡΡ".

Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ самый быстрый для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° строк?

По Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ тСстов, Π‘Ρ‚Ρ€ΠΎΠΊΠ°[0] (Π² 8.3+) ΠΈΠ»ΠΈ Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, 1) β€” Π»ΠΈΠ΄Π΅Ρ€Ρ‹ ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. РСгулярныС выраТСния Π² этом случаС катСгоричСски Π½Π΅ подходят ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΠΉ скорости.

Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ строки β€” Π±ΡƒΠΊΠ²Π°?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°:

Если Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅("^[Π°-яА-Π―a-zA-Z]").ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) Π’ΠΎΠ³Π΄Π°

// ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ символ β€” Π±ΡƒΠΊΠ²Π°

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

Для ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹ ΠΈ Π»Π°Ρ‚ΠΈΠ½ΠΈΡ†Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ НРСг(Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, 1)) = Π›Π΅Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, 1) (сравнСниС Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС).