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

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ всС доступныС инструмСнты для поиска подстроки: ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Найти() ΠΈ БтрНайти() Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ с использованиСм рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π‘Ρ‚Ρ€ΠΎΠΊΠ°. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ошибкам, влиянию рСгистра символов ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими тСкстами.

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΊΠ°ΠΊ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ 1Π‘, Ρ‚Π°ΠΊ ΠΈ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ программистам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ знания ΠΈΠ»ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‘ΠΌΠ°Ρ…. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° протСстированы Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.23, Π½ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈ Π² Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях.

1. Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Найти() ΠΈ БтрНайти()

Π‘Π°ΠΌΡ‹Π΅ простыС ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для поиска подстроки β€” это Найти() ΠΈ БтрНайти(). Они входят Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ 1Π‘ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΈΡ… особСнности ΠΈ отличия.

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

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Найти("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!", "ΠΌΠΈΡ€"); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 9

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Найти("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!", "ΠœΠΈΡ€"); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 0

Ѐункция БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°) Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ Π½Π΅Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π° ΠΊ рСгистру. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ ΠΈ строчными Π±ΡƒΠΊΠ²Π°ΠΌΠΈ:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = БтрНайти("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!", "МИР"); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 9
  • πŸ” Найти() β€” рСгистрозависимый поиск (Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ "А" ΠΈ "Π°").
  • πŸ”Ž БтрНайти() β€” рСгистронСзависимый поиск (ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ рСгистр).
  • ⚑ ОбС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ 0, Ссли подстрока Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°.
  • πŸ“ ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΈ символов ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ с 1, Π° Π½Π΅ с 0 (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования).

Ошибка, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ часто Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ β€” ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Найти() ΠΊΠ°ΠΊ Π±ΡƒΠ»Π΅Π²ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (истина/лоТь). НапримСр, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚:

Если Найти(ВСкст, "искомая") Π’ΠΎΠ³Π΄Π°

// Ошибка! Найти() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число, Π° Π½Π΅ Π‘ΡƒΠ»Π΅Π²ΠΎ

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

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

Если Найти(ВСкст, "искомая") > 0 Π’ΠΎΠ³Π΄Π°

// ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ° Π½Π°ΠΉΠ΄Π΅Π½Π°

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

πŸ“Š Какой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ поиска подстроки Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ Ρ‡Π°Ρ‰Π΅?
Найти()
БтрНайти()
РСгулярныС выраТСния
ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π‘Ρ‚Ρ€ΠΎΠΊΠ°
Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚

2. Поиск с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ: Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Найти() ΠΈ БтрНайти() ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Если Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ подстроку с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ поиска (справа Π½Π°Π»Π΅Π²ΠΎ), придётся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ подстроки, ΠΌΠΎΠΆΠ½ΠΎ сначала Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅, начиная с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ + 1:

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Найти(ВСкст, "Π°");

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

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Найти(ВСкст, "Π°", ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ + 1); // Π˜Ρ‰Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅

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

Однако Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ΡƒΠ΄ΠΎΠ±Π΅Π½ для слоТных сцСнариСв. Π“ΠΎΡ€Π°Π·Π΄ΠΎ Π³ΠΈΠ±Ρ‡Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π‘Ρ‚Ρ€ΠΎΠΊΠ°:

Π’Π΅ΠΊΡΡ‚ΠžΠ±ΡŠΠ΅ΠΊΡ‚ = Новый Π‘Ρ‚Ρ€ΠΎΠΊΠ°("ΠŸΡ€ΠΈΠΌΠ΅Ρ€ тСкста для поиска подстроки");

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Π’Π΅ΠΊΡΡ‚ΠžΠ±ΡŠΠ΅ΠΊΡ‚.Найти("тСкст", 1); // Π˜Ρ‰Π΅ΠΌ с 1-ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ = Π’Π΅ΠΊΡΡ‚ΠžΠ±ΡŠΠ΅ΠΊΡ‚.НайтиБ ΠΊΠΎΠ½Ρ†Π°("подстроки"); // Π˜Ρ‰Π΅ΠΌ с ΠΊΠΎΠ½Ρ†Π°

ΠœΠ΅Ρ‚ΠΎΠ΄ ОписаниС ΠŸΡ€ΠΈΠΌΠ΅Ρ€
Найти(ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°, Начало) Π˜Ρ‰Π΅Ρ‚ подстроку с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ (рСгистрозависимый) ВСкст.Найти("Π°", 5)
НайтиБ ΠΊΠΎΠ½Ρ†Π°(ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°) Π˜Ρ‰Π΅Ρ‚ подстроку с ΠΊΠΎΠ½Ρ†Π° строки ВСкст.НайтиБ ΠΊΠΎΠ½Ρ†Π°("ΠΈ")
ВРСгистрСНайти(ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°) РСгистронСзависимый поиск ВСкст.ВРСгистрСНайти("Π’Π•ΠšΠ‘Π’")
ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΡƒ(ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ, Π”Π»ΠΈΠ½Π°) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ строки (ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для извлСчСния Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… частСй) ВСкст.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΡƒ(8, 5)

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π‘Ρ‚Ρ€ΠΎΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для раздСлСния тСкста ΠΏΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ подстрокС:

Части = Π’Π΅ΠΊΡΡ‚ΠžΠ±ΡŠΠ΅ΠΊΡ‚.Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ(" "); // Π Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌ

Для КаТдого Π§Π°ΡΡ‚ΡŒ Из Части Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π§Π°ΡΡ‚ΡŒ);

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

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‡Π΅Ρ€Π΅Π· Новый Π‘Ρ‚Ρ€ΠΎΠΊΠ°()|Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ рСгистру ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ|Для рСгистронСзависимого поиска ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ВРСгистрСНайти()|ΠŸΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ нумСрация символов начинаСтся с 1-->

3. РСгулярныС выраТСния: ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для слоТных поисков

Когда Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ подстроку ΠΏΠΎ слоТному ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, всС email-адрСса Π² тСкстС ΠΈΠ»ΠΈ числа Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅), Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ приходят рСгулярныС выраТСния. Π’ 1Π‘ ΠΎΠ½ΠΈ доступны Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ РСгулярноСВыраТСниС (ΠΈΠ»ΠΈ RegExp Π² англоязычной вСрсии).

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ прСимущСства рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

  • 🎯 Поиск ΠΏΠΎ Π³ΠΈΠ±ΠΊΠΈΠΌ шаблонам (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "всС слова ΠΈΠ· 5 Π±ΡƒΠΊΠ²" ΠΈΠ»ΠΈ "Π΄Π°Ρ‚Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π”Π”.ММ.Π“Π“Π“Π“").
  • πŸ”„ Π—Π°ΠΌΠ΅Π½Π° Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… подстрок с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ контСкста.
  • πŸ“Œ Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² тСкста ΠΏΠΎ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π½Π°ΠΉΠ΄Ρ‘ΠΌ всС Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ +7 (XXX) XXX-XX-XX:

ВСкст = "ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹: +7 (495) 123-45-67 ΠΈ +7 (812) 987-65-43";

Π Π΅Π³Π’Ρ‹Ρ€ = Новый РСгулярноСВыраТСниС("\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}");

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

Пока Π Π΅Π³Π’Ρ‹Ρ€.Найти(ВСкст) Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π Π΅Π³Π’Ρ‹Ρ€.НайдСнноС(0)); // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "+7 (495) 123-45-67" ΠΈ "+7 (812) 987-65-43"

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

Π’Π°ΠΆΠ½Ρ‹Π΅ Π½ΡŽΠ°Π½ΡΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с рСгулярными выраТСниями Π² 1Π‘:

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Бинтаксис рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² 1Π‘ основан Π½Π° стандартС ECMAScript, Π½ΠΎ Π΅ΡΡ‚ΡŒ ограничСния. НапримСр, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ lookbehind-утвСрТдСния (positive/negative lookbehind) Π² старых вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. ВсСгда тСстируйтС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…!

Для Π·Π°ΠΌΠ΅Π½Ρ‹ подстрок с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ рСгулярного выраТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ():

Π Π΅Π³Π’Ρ‹Ρ€ = Новый РСгулярноСВыраТСниС("срочно|Π²Π°ΠΆΠ½ΠΎ|urgent");

ВСкст = "Π­Ρ‚ΠΎ срочно Π²Π°ΠΆΠ½ΠΎΠ΅ сообщСниС!";

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π Π΅Π³Π’Ρ‹Ρ€.Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(ВСкст, "$0");

// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: "Π­Ρ‚ΠΎ срочно Π²Π°ΠΆΠ½ΠΎΠ΅ сообщСниС!"

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ слоТного рСгулярного выраТСния для поиска email

Π¨Π°Π±Π»ΠΎΠ½: \b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b

ПояснСниС: ΠΈΡ‰Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ символов Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ@Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ.Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Π³Π΄Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Ρ‹, Ρ†ΠΈΡ„Ρ€Ρ‹, Ρ‚ΠΎΡ‡ΠΊΠΈ, подчёркивания ΠΈ дСфисы. Π’ΠΎΡ‡ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°, Π° Π΄ΠΎΠΌΠ΅Π½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ хотя Π±Ρ‹ 2 символа.

4. Поиск с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов

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

РаспространённыС "ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ":

  • πŸ“„ Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ПБ (ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки) ΠΈ Π’Π°Π± (табуляция) ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅, Π½ΠΎ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° поиск.
  • 🌍 ВСксты Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, UTF-8 ΠΈ Windows-1251) ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ символы с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ.
  • πŸ”— НСразрывныС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ (Β ) ΠΈ дСфисы (–, β€”) Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅, Π½ΠΎ тСхничСски ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΡ‘ΠΌΡ‹:

  1. НормализуйтС строки ΠΏΠ΅Ρ€Π΅Π΄ поиском: Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ всС Π²ΠΈΠ΄Ρ‹ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ пСрСносов Π½Π° стандартныС:
    ВСкст = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(ВСкст, Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹.ПБ, " ");
    

    ВСкст = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(ВСкст, Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹.Π’Π°Π±, " ");

    ВСкст = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(ВСкст, Π‘ΠΈΠΌΠ²ΠΎΠ»(160), " "); // НСразрывный ΠΏΡ€ΠΎΠ±Π΅Π»

  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈΠ»ΠΈ ВСкстовыйДокумСнт для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹ΠΌΠΈ символами.
  3. Для сравнСния строк Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ ΠΈΡ… Π² ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, UTF-8).

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ 1Π‘: функция Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для строк с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹ΠΌΠΈ символами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π° Π² UTF-8). Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π”Π»ΠΈΠ½Π°() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π‘Ρ‚Ρ€ΠΎΠΊΠ°.

Бимвол Код в 1Б ОписаниС
ПБ (ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки) Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹.ПБ Π‘ΠΈΠΌΠ²ΠΎΠ» пСрСноса строки (Π² Windows β€” \r\n)
Вабуляция Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹.Π’Π°Π± Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ табуляция (\t)
НСразрывный ΠΏΡ€ΠΎΠ±Π΅Π» Π‘ΠΈΠΌΠ²ΠΎΠ»(160) ΠŸΡ€ΠΎΠ±Π΅Π», Π·Π°ΠΏΡ€Π΅Ρ‰Π°ΡŽΡ‰ΠΈΠΉ пСрСнос строки (  Π² HTML)
Π”Π»ΠΈΠ½Π½ΠΎΠ΅ Ρ‚ΠΈΡ€Π΅ Π‘ΠΈΠΌΠ²ΠΎΠ»(8212) Π’ΠΈΡ€Π΅ Π΄Π»ΠΈΠ½ΠΎΠΉ Π² "ΠΌ" (β€”), часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ‚ΠΈΠΏΠΎΠ³Ρ€Π°Ρ„ΠΈΠΊΠ΅
Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°Π’Π’ΠΈΠ΄Π”Π»ΡΠžΡ‚Π»Π°Π΄ΠΊΠΈ(ВСкст)); // ΠŸΠΎΠΊΠ°ΠΆΠ΅Ρ‚ всС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы

-->

5. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ поискС Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСкстах

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ подстроки Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСкстах (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ„Π°ΠΉΠ»Π°Ρ… Π»ΠΎΠ³ΠΎΠ² ΠΈΠ»ΠΈ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…), стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ 1Π‘ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π²Π°ΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ "зависаний" систСмы.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

  • ⚑ Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² с поиском β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Найти() Π² Ρ†ΠΈΠΊΠ»Π΅ замСдляСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.
  • πŸ”„ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈΠ»ΠΈ ВСкстовыйДокумСнт для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большими тСкстами.
  • πŸ“Œ ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΠ²Π°ΠΉΡ‚Π΅ тСкст Π½Π° части, Ссли ΠΈΡ‰Π΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… подстрок.
  • πŸ›  Для слоТных поисков (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, парсинг Π»ΠΎΠ³ΠΎΠ²) рассматривайтС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎ внСшниС систСмы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SQL ΠΈΠ»ΠΈ Elasticsearch).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ поиска всСх Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ подстроки Π² большом тСкстС:

Π’Π΅ΠΊΡΡ‚ΠžΠ±ΡŠΠ΅ΠΊΡ‚ = Новый Π‘Ρ‚Ρ€ΠΎΠΊΠ°(Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉΠ’Π΅ΠΊΡΡ‚);

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

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ = Новый Массив();

Пока ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ > 0 Π¦ΠΈΠΊΠ»

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Π’Π΅ΠΊΡΡ‚ΠžΠ±ΡŠΠ΅ΠΊΡ‚.Найти("искомая", ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ);

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

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ);

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ + 1; // БдвигаСмся Π½Π° 1 символ Π²ΠΏΠ΅Ρ€Ρ‘Π΄

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

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

Для Π΅Ρ‰Ρ‘ большСй ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСгулярныС выраТСния с Ρ„Π»Π°Π³ΠΎΠΌ глобального поиска:

Π Π΅Π³Π’Ρ‹Ρ€ = Новый РСгулярноСВыраТСниС("шаблон", РСгулярноСВыраТСниС.Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ = Π Π΅Π³Π’Ρ‹Ρ€.Найти(Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉΠ’Π΅ΠΊΡΡ‚);

Пока Π Π΅Π³Π’Ρ‹Ρ€.Найти(Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉΠ’Π΅ΠΊΡΡ‚) Π¦ΠΈΠΊΠ»

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ вхоТдСния

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с тСкстами Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 10 ΠœΠ‘ Π² 1Π‘ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ошибки Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Ρ€Π°Π·Π±Π΅ΠΉΡ‚Π΅ тСкст Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ 1–2 ΠœΠ‘ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.
πŸ’‘

Для максимальной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ поискС Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСкстах ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с Ρ„Π»Π°Π³ΠΎΠΌ Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ. Π­Ρ‚ΠΎ сокращаСт количСство ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² ΠΏΠΎ тСксту ΠΈ ускоряСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

6. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ поиска подстрок

Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ нСсколько Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… сцСнариСв, Π³Π΄Π΅ трСбуСтся поиск подстроки Π² 1Π‘, ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ способы ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° email

Π—Π°Π΄Π°Ρ‡Π°: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, соотвСтствуСт Π»ΠΈ строка Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ email.

РСшСниС: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠ΅ΠΉ.

Ѐункция ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒEmail(Π‘Ρ‚Ρ€ΠΎΠΊΠ°)

Π Π΅Π³Π’Ρ‹Ρ€ = Новый РСгулярноСВыраТСниС("^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$");

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π Π΅Π³Π’Ρ‹Ρ€.ВСст(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ;

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ чисСл ΠΈΠ· строки

Π—Π°Π΄Π°Ρ‡Π°: Π½Π°ΠΉΡ‚ΠΈ всС числа Π² тСкстС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "Π’ΠΎΠ²Π°Ρ€ 123 Π½Π° сумму 456.78 Ρ€ΡƒΠ±." β†’ [123, 456.78]).

РСшСниС: рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ Π·Π°Ρ…Π²Π°Ρ‚Π°.

Π Π΅Π³Π’Ρ‹Ρ€ = Новый РСгулярноСВыраТСниС("\d+\.?\d*");

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

Пока Π Π΅Π³Π’Ρ‹Ρ€.Найти(ВСкст) Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π Π΅Π³Π’Ρ‹Ρ€.НайдСнноС(0)); // 123, 456.78

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: Поиск с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ контСкста

Π—Π°Π΄Π°Ρ‡Π°: Π½Π°ΠΉΡ‚ΠΈ слово "ошибка" Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ ΠΈΠ΄Ρ‘Ρ‚ слово "Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Π°Ρ".

РСшСниС: рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с lookahead.

Π Π΅Π³Π’Ρ‹Ρ€ = Новый РСгулярноСВыраТСниС("Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Π°Ρ.*?ошибка");

Если Π Π΅Π³Π’Ρ‹Ρ€.ВСст(ВСкст) Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НайдСна Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Π°Ρ ошибка!");

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4: Π—Π°ΠΌΠ΅Π½Π° подстрок с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ рСгистра

Π—Π°Π΄Π°Ρ‡Π°: Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС вхоТдСния "ΠΊΠ»ΠΈΠ΅Π½Ρ‚" Π½Π° "ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»ΡŒ", Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли слово написано с малСнькой Π±ΡƒΠΊΠ²Ρ‹.

РСшСниС: рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π³Ρ€Π°Π½ΠΈΡ† слов.

Π Π΅Π³Π’Ρ‹Ρ€ = Новый РСгулярноСВыраТСниС("\bΠΊΠ»ΠΈΠ΅Π½Ρ‚\b");

ВСкст = Π Π΅Π³Π’Ρ‹Ρ€.Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(ВСкст, "ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»ΡŒ");

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 5: Поиск Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: Π½Π°ΠΉΡ‚ΠΈ всС строки Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π³Π΄Π΅ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ "ОписаниС" содСрТится слово "срочно".

РСшСниС: ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ строк с использованиСм БтрНайти().

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ = Новый Массив();

Для КаТдого Π‘Ρ‚Ρ€ΠΎΠΊΠ° Из Π’Π°Π±Π»ΠΈΡ†Π° Π¦ΠΈΠΊΠ»

Если БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°.ОписаниС, "срочно") > 0 Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

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

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

Как ΠΈΡΠΊΠ°Ρ‚ΡŒ подстроки Π² Ρ„Π°ΠΉΠ»Π°Ρ… 1Π‘ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ… ΠΈΠ»ΠΈ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π°Ρ…)

Для поиска ΠΏΠΎ Ρ„Π°ΠΉΠ»Π°ΠΌ исходного ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ внСшниС инструмСнты (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Notepad++ ΠΈΠ»ΠΈ VS Code) с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’Π½ΡƒΡ‚Ρ€ΠΈ 1Π‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ тСкст ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ поиска:

ВСкст = Новый ЧтСниСВСкста(ИмяЀайла);

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ = ВСкст.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ();

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Найти(Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅, "искомая подстрока");

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

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ 1Π‘ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ поискС подстрок. Π’ΠΎΡ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённыС ΠΈΠ· Π½ΠΈΡ… ΠΈ способы ΠΈΡ… прСдотвращСния:

  • πŸ” Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСгистра β€” использованиС Найти() вмСсто БтрНайти(), ΠΊΠΎΠ³Π΄Π° рСгистр Π½Π΅ Π²Π°ΠΆΠ΅Π½. ВсСгда Π΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ рСгистр Π² вашСй Π·Π°Π΄Π°Ρ‡Π΅.
  • πŸ“ ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ 0 β€” Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Найти() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 0 ΠΏΡ€ΠΈ отсутствии Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ, Π° Π½Π΅ Π›ΠΎΠΆΡŒ.
  • πŸ”„ Π—Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ поискС β€” Ссли Π½Π΅ ΡΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ поиска, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² бСсконСчный Ρ†ΠΈΠΊΠ»:
    // Ошибка: ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ Π½Π΅ измСняСтся!
    

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

    Пока Найти(ВСкст, "Π°", ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ) > 0 Π¦ΠΈΠΊΠ»

    // ...

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

  • 🌍 ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ β€” поиск Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ·-Π·Π° Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, BOM Π² Π½Π°Ρ‡Π°Π»Π΅ UTF-8 Ρ„Π°ΠΉΠ»Π°).
  • πŸ›  Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ рСгулярныС выраТСния β€” использованиС слоТных regex Ρ‚Π°ΠΌ, Π³Π΄Π΅ достаточно БтрНайти().

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ†ΠΈΠΊΠ»Π° поиска:

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

Пока Π˜ΡΡ‚ΠΈΠ½Π° Π¦ΠΈΠΊΠ»

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Найти(ВСкст, "Π°", ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ);

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

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ; // Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ, Ссли Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ

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

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НайдСно Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ: " + ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ);

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ + 1; // Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ!

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с рСгулярными выраТСниями Π² 1Π‘ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° escape-символы. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Ρ‚ΠΎΡ‡ΠΊΡƒ (.), Π΅Ρ‘ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: \.. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Ρ‚ΠΎΡ‡ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ "любой символ".

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° типичная ошибка β€” ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΡΠΊΠ°Ρ‚ΡŒ подстроку Π² НСопрСдСлённо ΠΈΠ»ΠΈ NULL. ВсСгда провСряйтС Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

Если Π’ΠΈΠΏΠ—Π½Ρ‡(ВСкст) <> Π’ΠΈΠΏ("Π‘Ρ‚Ρ€ΠΎΠΊΠ°") Π’ΠΎΠ³Π΄Π°

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

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

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

Как Π½Π°ΠΉΡ‚ΠΈ всС вхоТдСния подстроки, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» с смСщСниСм Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ поиска:

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

Пока Π˜ΡΡ‚ΠΈΠ½Π° Π¦ΠΈΠΊΠ»

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Найти(ВСкст, "Π°", ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ);

Если ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = 0 Π’ΠΎΠ³Π΄Π° ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ; ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

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

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ + 1; // Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ

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

Или ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ рСгулярныС выраТСния с Ρ„Π»Π°Π³ΠΎΠΌ Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Найти() Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ подстроку, которая Ρ‚ΠΎΡ‡Π½ΠΎ Π΅ΡΡ‚ΡŒ Π² тСкстС?

ВСроятныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

  1. Π Π°Π·Π½Ρ‹ΠΉ рСгистр символов (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ БтрНайти() ΠΈΠ»ΠΈ ВРСгистрСНайти()).
  2. НСвидимыС символы (ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, табуляции, BOM). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ тСкст Ρ‡Π΅Ρ€Π΅Π· Π‘Ρ‚Ρ€ΠΎΠΊΠ°Π’Π’ΠΈΠ΄Π”Π»ΡΠžΡ‚Π»Π°Π΄ΠΊΠΈ().
  3. НСсоотвСтствиС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, тСкст Π² UTF-8, Π° ΠΈΡ‰Π΅Ρ‚Π΅ Π² Windows-1251).
Как ΠΈΡΠΊΠ°Ρ‚ΡŒ подстроки Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ„Π°ΠΉΠ»Π°Ρ…)?

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅Π”Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Найти():

Π”Π°Π½Π½Ρ‹Π΅ = Новый Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅Π”Π°Π½Π½Ρ‹Π΅(Π€Π°ΠΉΠ».ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ());

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Π”Π°Π½Π½Ρ‹Π΅.Найти(Новый Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅Π”Π°Π½Π½Ρ‹Π΅("искомая подстрока"));

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ поиск вСдётся ΠΏΠΎ Π±Π°ΠΉΡ‚Π°ΠΌ, Π° Π½Π΅ ΠΏΠΎ символам!

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСгулярныС выраТСния для поиска Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… 1Π‘?

Π”Π°, Π½ΠΎ Π½Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. НуТно:

  1. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² строку (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π’Π‘Ρ‚Ρ€ΠΎΠΊΡƒΠ’Π½ΡƒΡ‚Ρ€()).
  2. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ строкС.
  3. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… с исходными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

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

ВСкст = "";

Для КаТдого Π‘Ρ‚Ρ€ΠΎΠΊΠ° Из Π’Π°Π±Π»ΠΈΡ†Π° Π¦ΠΈΠΊΠ»

ВСкст = ВСкст + Π‘Ρ‚Ρ€ΠΎΠΊΠ°.ОписаниС + Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹.ПБ;

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

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

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

Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ поиск подстрок Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСкстах (100+ ΠœΠ‘)?

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ:

  • Π Π°Π·Π±ΠΈΠ²Π°ΠΉΡ‚Π΅ тСкст Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ 1–5 ΠœΠ‘ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ внСшниС инструмСнты (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, grep для Linux ΠΈΠ»ΠΈ PowerShell для Windows).
  • Для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°ΠΉΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² SQL ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ полнотСкстовый поиск.
  • Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² с Найти() β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ рСгулярныС выраТСния.