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

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

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ошибкам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приводят ΠΊ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌΡƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ символа Π² строках с пСрСносами ΠΈΠ»ΠΈ Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ Π·Π½Π°ΠΊΠ°ΠΌΠΈ. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π»ΠΎΠ²ΡƒΡˆΠ΅ΠΊ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с рСгистром, ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами.

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска: Найти() ΠΈ Π‘Ρ‚Ρ€ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ()

Начнём с Π΄Π²ΡƒΡ… основных встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ 90% Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ поиску символов:

  • πŸ” Найти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°) β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния подстроки (с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ рСгистра) ΠΈΠ»ΠΈ 0, Ссли Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ.
  • πŸ“ Π‘Ρ‚Ρ€ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°) β€” Π°Π½Π°Π»ΠΎΠ³ Найти(), Π½ΠΎ Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° рСгистра (Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅).

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

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Найти("ΠŸΡ€ΠΈΠΌΠ΅Ρ€ строки для поиска", "ΠΏΠΎΠΈ"); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 17

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠ‘Π΅Π·Π Π΅Π³ΠΈΡΡ‚Ρ€Π° = Π‘Ρ‚Ρ€ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ("ΠŸΡ€ΠΈΠΌΠ΅Ρ€ БВРОКИ", "стр"); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 8

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ отличия:

ЀункцияУчёт рСгистраВозвращаСт ΠΏΡ€ΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠΈΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
Найти()Π”Π°0Π’Ρ‹ΡˆΠ΅
Π‘Ρ‚Ρ€ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ()НСт0НиТС
БтрНайти() (устар.)Π”Π°Undefinedβ€”

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ѐункция БтрНайти(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° НСопрСдСлСно ΠΏΡ€ΠΈ отсутствии Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ, устарСла Π² вСрсиях 8.3.10+. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Найти().

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

Поиск с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ рСгистра ΠΈ Π±Π΅Π·: ΠΊΠΎΠ³Π΄Π° Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ Найти() ΠΈ Π‘Ρ‚Ρ€ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ() зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ:

  • πŸ“Œ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Найти(), Ссли Π²Π°ΠΆΠ΅Π½ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ рСгистр (поиск Π»ΠΎΠ³ΠΈΠ½Π°, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° пароля, Ρ€Π°Π±ΠΎΡ‚Π° с XML-Ρ‚Π΅Π³Π°ΠΌΠΈ).
  • πŸ”„ ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ Π‘Ρ‚Ρ€ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ() для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° (поиск ΠΏΠΎ справочникам, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…), Π³Π΄Π΅ рСгистр Π½Π΅ Π²Π°ΠΆΠ΅Π½.
  • ⚑ Для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ мСст (Ρ†ΠΈΠΊΠ»Ρ‹ ΠΏΠΎ большим тСкстам) всСгда ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Найти().

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

// ΠœΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ (ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ рСгистра всСй строки)

Если БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°) > 0 Π’ΠΎΠ³Π΄Π°

// Быстрый Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ (Ссли рСгистр Π½Π΅ Π²Π°ΠΆΠ΅Π½)

Если Найти(БтрНиТр(Π‘Ρ‚Ρ€ΠΎΠΊΠ°), БтрНиТр(ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°)) > 0 Π’ΠΎΠ³Π΄Π°

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ѐункция Π‘Ρ‚Ρ€ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ() Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΎΠ±Π΅ строки ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру, Ρ‡Ρ‚ΠΎ Π½Π° 30-40% замСдляСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Найти().

πŸ’‘

Для поиска Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСкстах (>1000 символов) ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ строку ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π° Π½Π΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅.

Поиск всСх Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ символа Π² строкС

Часто трСбуСтся Π½Π°ΠΉΡ‚ΠΈ всС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ символа, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ»:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "123-456-789";

Π‘ΠΈΠΌΠ²ΠΎΠ» = "-";

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

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

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

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

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

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

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ + 1; // БдвигаСмся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ зацикливания

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

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

Для ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… символов (UTF-8) этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 8.3.14+. Π’ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Π‘Ρ‚Ρ€ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘ΠΈΠΌΠ²ΠΎΠ», ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ, , "U"); // ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "U" для UTF-8

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ=1

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Найти() Π² Ρ†ΠΈΠΊΠ»Π΅

Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ вхоТдСния

Для UTF-8 Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "U" Π² Π‘Ρ‚Ρ€ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ()-->

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

Когда Π½ΡƒΠΆΠ½Π° Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ (поиск ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, Ρ€Π°Π±ΠΎΡ‚Π° с Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ символов), примСняйтС рСгулярныС выраТСния Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ РСгулярноСВыраТСниС:

Π Π’ = Новый РСгулярноСВыраТСниС("[0-9]{3}-[0-9]{3}");

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π Π’.Поиск("НомСр Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°: 123-456, Π΄Π°Ρ‚Π°: 01.01.2023");

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

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НайдСно: " + Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅); // "123-456"

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

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

  • 🎯 Поиск ΠΏΠΎ слоТным шаблонам (Π΄Π°Ρ‚Ρ‹, emails, Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ²)
  • πŸ”„ Π—Π°ΠΌΠ΅Π½Π° с сохранСниСм Π³Ρ€ΡƒΠΏΠΏ (Π Π’.Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ())
  • πŸ“Œ Π Π°Π±ΠΎΡ‚Π° с юникод-символами (\p{L} для Π±ΡƒΠΊΠ²)

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: РСгулярныС выраТСния Π² 1Π‘ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ шаблонов.

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

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

Π€Π»Π°Π³ "i" Π΄Π΅Π»Π°Π΅Ρ‚ поиск Π½Π΅Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊ рСгистру.

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

ΠžΡΠΎΠ±ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ символы: табуляции (\t), ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ строк (\n, \r), Π½Π΅Ρ€Π°Π·Ρ€Ρ‹Π²Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ (\u00A0). Π˜Ρ… поиск Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‘ΠΌΠΎΠ²:

// Поиск любого ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ символа

Π Π’ = Новый РСгулярноСВыраТСниС("\s");

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Π Π’.ΠŸΠΎΠΈΡΠΊΠ’Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ("Π‘Ρ‚Ρ€ΠΎΠΊΠ° с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ").Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅();

// Поиск ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ символа ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Найти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘ΠΈΠΌΠ²ΠΎΠ»(9)); // Вабуляция

Для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Ρ… символов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘ΠΈΠΌΠ²ΠΎΠ»(9), "[TAB]"));

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ѐункция Π‘ΠΎΠΊΡ€Π›ΠŸ() удаляСт Π’ΠžΠ›Π¬ΠšΠž ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² Π½Π°Ρ‡Π°Π»Π΅/ΠΊΠΎΠ½Ρ†Π΅ строки, Π½ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ табуляции ΠΈ Π½Π΅Ρ€Π°Π·Ρ€Ρ‹Π²Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. Для ΠΏΠΎΠ»Π½ΠΎΠΉ очистки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘ΠΈΠΌΠ²ΠΎΠ»(9), ""), Π‘ΠΈΠΌΠ²ΠΎΠ»(160), "");

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

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с тСкстами ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠΌ >100 Кб стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ 1Π‘ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½ΠΈΠ·ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ способами:

  1. πŸ”Ή ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ строку ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅Π΄ Ρ†ΠΈΠΊΠ»ΠΎΠΌ.
  2. πŸ”Ή Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π½Π° части: ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ тСкст Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΏΠΎ 10-50 Кб.
  3. πŸ”Ή ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: БохраняйтС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска Π² БоотвСтствиС для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ поиска:

БтрокаНиТн = БтрНиТр(Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉΠ’Π΅ΠΊΡΡ‚);

ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°ΠΠΈΠΆΠ½ = БтрНиТр(Π˜ΡΠΊΠΎΠΌΠ°ΡΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°);

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Найти(БтрокаНиТн, ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°ΠΠΈΠΆΠ½); // БыстрСС Ρ‡Π΅ΠΌ Π‘Ρ‚Ρ€ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ()

Для ΠΊΡ€Π°ΠΉΠ½Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСкстов (>1 Мб) рассмотритС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ построчно Ρ‡Π΅Ρ€Π΅Π· ВСкстовыйДокумСнт.

πŸ’‘

ΠŸΡ€ΠΈ поискС Π² тСкстах >100 Кб всСгда ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ строку ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру β€” это ускорит Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² 2-3 Ρ€Π°Π·Π°.

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

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

  • ❌ Π—Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΡΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² Ρ†ΠΈΠΊΠ»Π΅: ΠŸΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ бСсконСчному Ρ†ΠΈΠΊΠ»Ρƒ Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ символах.
  • ❌ Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ: Π’ UTF-8 символ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ 2-4 Π±Π°ΠΉΡ‚Π°, Ρ‡Ρ‚ΠΎ Π»ΠΎΠΌΠ°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.
  • ❌ ΠŸΡƒΡ‚Π°ΡŽΡ‚ 1-ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ: Π’ 1Π‘ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с 1, Π° Π½Π΅ с 0 ΠΊΠ°ΠΊ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

// БСсконСчный Ρ†ΠΈΠΊΠ»!

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

Пока Найти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "-", ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ) > 0 Π¦ΠΈΠΊΠ»

// Π—Π°Π±Ρ‹Π»ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠŸΠΎΠ·ΠΈΡ†ΠΈΡŽ

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

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

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

Пока (ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Найти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "-", ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ)) > 0 Π¦ΠΈΠΊΠ»

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

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 8.2 функция Найти() ΠΏΡ€ΠΈ поискС пустой строки всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ логичСским ошибкам. Π’ 8.3 это исправлСно.

πŸ“Š Π‘Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ Π»ΠΈ Π²Ρ‹ с ошибками ΠΏΡ€ΠΈ поискС символов Π² 1Π‘?
Π”Π°, часто
Π Π΅Π΄ΠΊΠΎ
НСт, всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ
НС знаю, ΠΊΠ°ΠΊ это ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ

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

Как Π½Π°ΠΉΡ‚ΠΈ послСдний символ Π² строкС?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) для получСния ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ послСднСго символа. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сам символ: Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°), 1).

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Найти() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 0, хотя символ Π΅ΡΡ‚ΡŒ Π² строкС?

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅:

  1. РСгистр символов (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘Ρ‚Ρ€ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ() для поиска Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° рСгистра)
  2. НаличиС Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Ρ… символов (ΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π‘ΠΎΠΊΡ€Π›ΠŸ())
  3. ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ строки (для UTF-8 Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "U")

Как Π½Π°ΠΉΡ‚ΠΈ всС Ρ†ΠΈΡ„Ρ€Ρ‹ Π² строкС?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: Π Π’ = Новый РСгулярноСВыраТСниС("[0-9]");. Для извлСчСния всСх Ρ†ΠΈΡ„Ρ€: Π Π’.ΠŸΠΎΠΈΡΠΊΠ’Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°).

МоТно Π»ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ символы Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…?

НСт, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Найти() ΠΈ Π‘Ρ‚Ρ€ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ() Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ со строками. Для Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΡƒ() ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅Π”Π°Π½Π½Ρ‹Π΅.

Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ поиск Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΠΎ 10000 строк?

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ БоотвСтствиС для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Кэш = Новый БоотвСтствиС();

Если НЕ Кэш.Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) Π’ΠΎΠ³Π΄Π°

Кэш.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Найти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°));

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