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

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

1. Бтандартная функция Найти(): простой поиск подстроки

Ѐункция Найти() β€” самый Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ инструмСнт для поиска Π² строках. Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния подстроки (ΠΈΠ»ΠΈ символа) Π² исходной строкС. Если Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ 0.

Бинтаксис Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Найти(Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, Π˜ΡΠΊΠΎΠΌΠ°ΡΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°[, ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°ΡΠŸΠΎΠ·ΠΈΡ†ΠΈΡ[, РСгистр]])

Π“Π΄Π΅:

  • πŸ“Œ Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ° β€” строка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ вСдётся поиск;
  • πŸ“Œ Π˜ΡΠΊΠΎΠΌΠ°ΡΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ° β€” символ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов для поиска;
  • πŸ“Œ ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°ΡΠŸΠΎΠ·ΠΈΡ†ΠΈΡ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) β€” позиция, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ поиск (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1);
  • πŸ“Œ РСгистр (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) β€” ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ рСгистр (Π˜ΡΡ‚ΠΈΠ½Π°/Π›ΠΎΠΆΡŒ, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π›ΠΎΠΆΡŒ).

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

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "ΠŸΡ€ΠΈΠΌΠ΅Ρ€ строки для поиска";

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Найти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "ΠΎ"); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 5 (ΠΏΠ΅Ρ€Π²ΠΎΠ΅ "ΠΎ" Π² словС "ΠŸΡ€ΠΈΠΌΠ΅Ρ€")

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ);

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ѐункция Найти() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚Π½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅. Если строка содСрТит ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Π΅ символы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρƒ Π² UTF-8), Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ. Для Ρ‚Π°ΠΊΠΈΡ… случаСв ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ БтрНайти().
πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ поиска Π² строках Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
Найти()
БтрНайти()
РСгулярныС выраТСния
Π‘Π²ΠΎΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
НС знаю

2. Ѐункция БтрНайти(): Ρ€Π°Π±ΠΎΡ‚Π° с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹ΠΌΠΈ строками

Ѐункция БтрНайти() β€” ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ вСрсия Найти(), которая ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ строки с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹ΠΌΠΈ символами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρƒ ΠΈΠ»ΠΈ ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„Ρ‹). Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² символах, Π° Π½Π΅ Π² Π±Π°ΠΉΡ‚Π°Ρ…, Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ для Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ поиска.

Бинтаксис:

БтрНайти(Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, Π˜ΡΠΊΠΎΠΌΠ°ΡΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°[, ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°ΡΠŸΠΎΠ·ΠΈΡ†ΠΈΡ[, РСгистр]])

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

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "ΠŸΡ€ΠΈΠΌΠ΅Ρ€ строки с ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π΅ΠΉ";

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "ΠΈ"); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 3 (ΠΏΠ΅Ρ€Π²ΠΎΠ΅ "ΠΈ" Π² словС "ΠŸΡ€ΠΈΠΌΠ΅Ρ€")

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ);

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ отличия ΠΎΡ‚ Найти():

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ Найти() БтрНайти()
Π’ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π‘Π°ΠΉΡ‚Ρ‹ Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Unicode НСт Π”Π°
ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π’Ρ‹ΡˆΠ΅ НиТС (ΠΈΠ·-Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Unicode)
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΠΎΠ΅ использованиС ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ строки (ASCII) Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π΅ΠΉ, ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„Π°ΠΌΠΈ

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… источников (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, JSON ΠΈΠ»ΠΈ XML), Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Π΅ символы, всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ БтрНайти().

πŸ’‘

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ поиск Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… строках, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡŒΡ‚Π΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ поиска ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°ΡΠŸΠΎΠ·ΠΈΡ†ΠΈΡ. НапримСр, Ссли Π²Ρ‹ ΡƒΠΆΠ΅ нашли ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΡ‰Π΅Ρ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π² этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ послС Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ символа.

3. Поиск с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ рСгистра: ΠΊΠΎΠ³Π΄Π° это Π²Π°ΠΆΠ½ΠΎ

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Найти() ΠΈ БтрНайти() Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ рСгистр. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ поиск символа "А" Π½Π°ΠΉΠ΄Ρ‘Ρ‚ ΠΈ "Π°", ΠΈ "А". Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° трСбуСтся Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ поиск с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ рСгистра.

Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ РСгистр:

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = БтрНайти("ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π‘Ρ‚Ρ€ΠΎΠΊΠΈ", "Π‘", , Π˜ΡΡ‚ΠΈΠ½Π°); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 8 (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ заглавная "Π‘")

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠ‘Π΅Π·Π Π΅Π³ΠΈΡΡ‚Ρ€Π° = БтрНайти("ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π‘Ρ‚Ρ€ΠΎΠΊΠΈ", "с", , Π›ΠΎΠΆΡŒ); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 2 (ΠΏΠ΅Ρ€Π²ΠΎΠ΅ "с" Π² любом рСгистрС)

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ сцСнарии, Π³Π΄Π΅ Π²Π°ΠΆΠ΅Π½ рСгистр:

  • πŸ” ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° коррСктности Π²Π²ΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "ИНН" Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС);
  • πŸ” Π Π°Π·Π±ΠΎΡ€ Π»ΠΎΠ³ΠΎΠ², Π³Π΄Π΅ рСгистр символов нСсСт ΡΠΌΡ‹ΡΠ»ΠΎΠ²ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ;
  • πŸ” Поиск Π·Π°Π³Π»Π°Π²ΠΈΠΉ ΠΈΠ»ΠΈ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "ООО" vs "ΠΎΠΎΠΎ").
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ поискС с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ рСгистра Π² строках с ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΌ рСгистром (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅") Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ символ. ВсСгда провСряйтС исходныС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅.

4. Поиск с использованиСм рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа "@" Π² строкС:

Π Π΅Π³Π’Ρ‹Ρ€ = Новый Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅("@");

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π Π΅Π³Π’Ρ‹Ρ€.Поиск("user@example.com");

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

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 5

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

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

  • πŸ”§ Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ: ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ шаблонам (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "\d" для ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ†ΠΈΡ„Ρ€Ρ‹);
  • πŸ”§ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π³Ρ€ΡƒΠΏΠΏ Π·Π°Ρ…Π²Π°Ρ‚Π° (Ссли Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Π½ΠΎ ΠΈ сам символ);
  • πŸ”§ Π Π°Π±ΠΎΡ‚Π° с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹ΠΌΠΈ строками Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… настроСк.

НСдостатки:

  • ⚠️ Π‘ΠΎΠ»Π΅Π΅ низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с БтрНайти();
  • ⚠️ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ знания синтаксиса рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ слоТного шаблона

Найти ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ НЕ являСтся Π±ΡƒΠΊΠ²ΠΎΠΉ ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠΉ:

Π Π΅Π³Π’Ρ‹Ρ€ = Новый Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅("[^a-zA-ZΠ°-яА-Π―0-9]");

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π Π΅Π³Π’Ρ‹Ρ€.Поиск("Абв123!Π“Π΄Π΅");

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 7 (Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ)

5. Поиск Π² Ρ†ΠΈΠΊΠ»Π΅: ΠΊΠΎΠ³Π΄Π° стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ подходят

Π’ Ρ€Π΅Π΄ΠΊΠΈΡ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€ΡƒΡ‡Π½ΠΎΠΉ поиск символа Π² Ρ†ΠΈΠΊΠ»Π΅. НапримСр, Ссли Π½ΡƒΠΆΠ½ΠΎ:

  • πŸ”„ ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ;
  • πŸ”„ Π˜ΡΠΊΠ°Ρ‚ΡŒ символ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ условиями (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "пСрвая Ρ†ΠΈΡ„Ρ€Π° послС Π±ΡƒΠΊΠ²Ρ‹");
  • πŸ”„ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ для ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… строк (дСсятки тысяч символов).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для поиска ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния символа "-":

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "ВСст-строка-для-поиска";

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = 0;

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

Если Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Инд, 1) = "-" Π’ΠΎΠ³Π΄Π°

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Инд;

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ;

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

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

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 5

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Поиск Π² Ρ†ΠΈΠΊΠ»Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ подходят. НапримСр, для строк Π΄Π»ΠΈΠ½ΠΎΠΉ Π±ΠΎΠ»Π΅Π΅ 10 000 символов Ρ€Π°Π·Π½ΠΈΡ†Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ 100+ Ρ€Π°Π·.

- НуТна Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа|Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΎΡ‡Π΅Π½ΡŒ большиС, ΠΈ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ|ВрСбуСтся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку "Π½Π° Π»Π΅Ρ‚Ρƒ" Π²ΠΎ врСмя поиска|НуТно ΠΈΡΠΊΠ°Ρ‚ΡŒ символы с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ контСкста (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "пСрвая запятая послС двоСточия")-->

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

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с поиском символов Π² 1Π‘ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ошибки:

  1. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСгистра: Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ РСгистр = Π˜ΡΡ‚ΠΈΠ½Π°, ΠΊΠΎΠ³Π΄Π° это ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ. НапримСр, поиск "ООО" Π² строкС "ΠΎΠΎΠΎ 'Ромашка'" Π½Π΅ даст Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.
  2. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Ρ… строк: использованиС Найти() вмСсто БтрНайти() для ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ позициям.
  3. Поиск с Π½Π°Ρ‡Π°Π»Π° строки Π±Π΅Π· смСщСния: Ссли Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅ указываСтся ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°ΡΠŸΠΎΠ·ΠΈΡ†ΠΈΡ, поиск всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅.
  4. НСпровСрка Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π½Π° 0: Ссли символ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ 0, Π½ΠΎ этот случай часто Π½Π΅ обрабатываСтся, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкам.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ:

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = БтрНайти("ВСстовая строка", "x");

Если ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = 0 Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π‘ΠΈΠΌΠ²ΠΎΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½!");

Π˜Π½Π°Ρ‡Π΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ: " + ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ);

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

πŸ’‘

ВсСгда провСряйтС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ поиска Π½Π° равСнство 0 β€” это СдинствСнный Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ способ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ символ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½.

7. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ поиска Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… строках

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

  • πŸš€ ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΡŒΡ‚Π΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ поиска: Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ искомый символ находится Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ строки, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°ΡΠŸΠΎΠ·ΠΈΡ†ΠΈΡ ΠΈ ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Π°ΡΠ”Π»ΠΈΠ½Π° (для Π‘Ρ€Π΅Π΄()).
  • πŸš€ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ: Ссли строка статична, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π΅Ρ‘ Π½Π° части ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс символов.
  • πŸš€ Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ рСгулярныС выраТСния Π½Π° стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Ссли шаблон простой (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поиск ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа), БтрНайти() Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС.
  • πŸš€ ΠšΡΡˆΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹: Ссли строка Π½Π΅ мСняСтся, сохранитС ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ символа Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Ρ‘ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ поиска Π² большом тСкстС:

// ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас строка Π΄Π»ΠΈΠ½ΠΎΠΉ 100 000 символов

Π‘ΠΎΠ»ΡŒΡˆΠ°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ° = ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ‘ΠΎΠ»ΡŒΡˆΠΎΠΉΠ’Π΅ΠΊΡΡ‚();

Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠ‘ΠΈΠΌΠ²ΠΎΠ» = "|";

// ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ поиск ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ 10 000 символами

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = БтрНайти(Π›Π΅Π²(Π‘ΠΎΠ»ΡŒΡˆΠ°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, 10000), Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠ‘ΠΈΠΌΠ²ΠΎΠ»);

Если ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = 0 Π’ΠΎΠ³Π΄Π°

// Если Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, ΠΈΡ‰Π΅ΠΌ Π² ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = БтрНайти(Π‘Ρ€Π΅Π΄(Π‘ΠΎΠ»ΡŒΡˆΠ°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, 10001), Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠ‘ΠΈΠΌΠ²ΠΎΠ»);

Если ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ <> 0 Π’ΠΎΠ³Π΄Π°

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ + 10000; // ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ смСщСния

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

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

FAQ: ЧастыС вопросы ΠΏΠΎ поиску символов Π² 1Π‘

Как Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ послСднСго вхоТдСния символа Π² строку?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ БтрНайти() Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΈΠ»ΠΈ Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉΠŸΠΎΠΈΡΠΊ:

Π Π΅Π³Π’Ρ‹Ρ€ = Новый Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅("Π°");

Π Π΅Π³Π’Ρ‹Ρ€.Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉΠŸΠΎΠΈΡΠΊ = Π˜ΡΡ‚ΠΈΠ½Π°;

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π Π΅Π³Π’Ρ‹Ρ€.Поиск("Π±Π°Ρ€Π°Π±Π°Π½");

ΠŸΠΎΡΠ»Π΅Π΄Π½ΡΡΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = 0;

Пока Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.НайдСно() Π¦ΠΈΠΊΠ»

ΠŸΠΎΡΠ»Π΅Π΄Π½ΡΡΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ;

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π Π΅Π³Π’Ρ‹Ρ€.ΠΠ°ΠΉΡ‚ΠΈΠ‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅();

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

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(ΠŸΠΎΡΠ»Π΅Π΄Π½ΡΡΠŸΠΎΠ·ΠΈΡ†ΠΈΡ); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 6

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Найти() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ для ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹?

Ѐункция Найти() Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π±Π°ΠΉΡ‚Π°ΠΌΠΈ, Π° Π½Π΅ с символами. НапримСр, Π±ΡƒΠΊΠ²Π° "ΠΆ" Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ UTF-8 Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 Π±Π°ΠΉΡ‚Π°, поэтому позиция Π±ΡƒΠ΄Π΅Ρ‚ сдвинута. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ БтрНайти() для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Unicode.

Как Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ НЕ являСтся ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ?

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

Π Π΅Π³Π’Ρ‹Ρ€ = Новый Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅("\S"); // \S β€” любой Π½Π΅ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΉ символ

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π Π΅Π³Π’Ρ‹Ρ€.Поиск(" ΠŸΠ΅Ρ€Π²Π°Ρ Π±ΡƒΠΊΠ²Π°");

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 4

МоТно Π»ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ символы Π² строках с пСрСносами (Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹.ПБ)?

Π”Π°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ БтрНайти() ΠΈ Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ символы пСрСноса строк (Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹.ПБ). НапримСр:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "ΠŸΠ΅Ρ€Π²Π°Ρ строка" + Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹.ПБ + "Вторая строка";

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹.ПБ);

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 13 (позиция символа пСрСноса)

Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ поиск Π² строкС Π΄Π»ΠΈΠ½ΠΎΠΉ Π±ΠΎΠ»Π΅Π΅ 1 ΠΌΠ»Π½ символов?

Для Ρ‚Π°ΠΊΠΈΡ… случаСв:

  1. Π Π°Π·Π±Π΅ΠΉΡ‚Π΅ строку Π½Π° части (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ 100 000 символов) ΠΈ ΠΈΡ‰ΠΈΡ‚Π΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск, Ссли строка отсортирована ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ структуру.
  3. Если Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, пСрСнСситС Π»ΠΎΠ³ΠΈΠΊΡƒ поиска Π½Π° сторону Π‘Π£Π‘Π” (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² запросС 1Π‘).