Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с тСкстами Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅, Ρ‚ΠΎ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½Ρ‘Ρ‚Π΅ΡΡŒ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Ρ‡Π°ΡΡ‚ΡŒ строки, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅. Π—Π΄Π΅ΡΡŒ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ понятиС подстроки β€” ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… инструмСнтов манипуляции строковыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Но Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π½Π° самом Π΄Π΅Π»Π΅? Как ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ошибок Π² ΠΊΠΎΠ΄Π΅?

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

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с подстроками тормозят систСму ΠΈ ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…. А Π² ΠΊΠΎΠ½Ρ†Π΅ β€” FAQ с ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ Π½Π° частыС вопросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ подстрока ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½Π° Π½ΡƒΠΆΠ½Π° Π² 1Π‘

ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ° β€” это нСпрСрывная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов Π²Π½ΡƒΡ‚Ρ€ΠΈ строки. НапримСр, Π² строкС "Π‘Ρ‡Ρ‘Ρ‚ β„–123 ΠΎΡ‚ 01.01.2026" подстроками ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ:

  • πŸ“Œ "Π‘Ρ‡Ρ‘Ρ‚" β€” ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 4 символа
  • πŸ“Œ "123" β€” Π½ΠΎΠΌΠ΅Ρ€ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°
  • πŸ“Œ "01.01" β€” Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Ρ‚Ρ‹
  • πŸ“Œ "ΠΎΡ‚" β€” ΠΏΡ€Π΅Π΄Π»ΠΎΠ³ Π² сСрСдинС строки

Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ подстроки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для:

  • πŸ” Поиска Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² тСкстС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ наличия Π°Ρ€Ρ‚ΠΈΠΊΡƒΠ»Π° Π² Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚ΠΎΠ²Π°Ρ€Π°)
  • βœ‚οΈ Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΠ· строки)
  • πŸ”„ Π—Π°ΠΌΠ΅Π½Ρ‹ частСй строки (ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° шаблонов ΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ)
  • πŸ“Š Анализа структуры тСкста (Ρ€Π°Π·Π±ΠΎΡ€ Π»ΠΎΠ³ΠΎΠ², XML, JSON)

Π‘Π΅Π· Ρ€Π°Π±ΠΎΡ‚Ρ‹ с подстроками Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°, Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с внСшними систСмами. НапримСр, ΠΏΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Excel часто трСбуСтся "Π²Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ" лишниС символы ΠΈΠ· ячССк, Π° ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Π΅ΠΊΠΎΠ² для 54-Π€Π— β€” ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π΅Π³ΠΈ форматирования.

πŸ“Š Как часто Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с подстроками Π² 1Π‘?
Π•ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ
НСсколько Ρ€Π°Π· Π² нСдСлю
Π Π΅Π΄ΠΊΠΎ, ΠΏΠΎ нСобходимости
Никогда нС использовал

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с подстроками

Π’ 1Π‘ 8.3 для манипуляций с подстроками прСдусмотрСн Π½Π°Π±ΠΎΡ€ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ВсС ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π»ΠΈΠ±ΠΎ Π½ΠΎΠ²ΡƒΡŽ строку, Π»ΠΈΠ±ΠΎ числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ подстроки). ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Ѐункция ОписаниС ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования
БтрНайти() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния подстроки (начиная с 1). Если Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ β€” 0.
ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = БтрНайти("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!", "ΠΌΠΈΡ€"); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 8
Π›Π΅Π²() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство символов с Π½Π°Ρ‡Π°Π»Π° строки.
Начало = Π›Π΅Π²("1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅", 3); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ "1Π‘:"
ΠŸΡ€Π°Π²() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство символов с ΠΊΠΎΠ½Ρ†Π° строки.
ΠšΠΎΠ½Π΅Ρ† = ΠŸΡ€Π°Π²("Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ β„–123", 3); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ "123"
Π‘Ρ€Π΅Π΄() Π˜Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ подстроку, начиная с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.
Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ = Π‘Ρ€Π΅Π΄("АБВГД", 2, 3); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ "Π‘Π’Π“"
Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ() ЗамСняСт всС вхоТдСния подстроки Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ строку.
НоваяБтрока = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ("Π‘Ρ‚Π°Ρ€ΠΎΠ΅_Π½Π°Π·Π²Π°Π½ΠΈΠ΅", "_", " ");

Π’Π°ΠΆΠ½Ρ‹ΠΉ нюанс: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π›Π΅Π²(), ΠŸΡ€Π°Π²() ΠΈ Π‘Ρ€Π΅Π΄() Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ строку, Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π½ΠΎΠ²ΡƒΡŽ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ для сохранСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСпосрСдствСнно Π² выраТСниях.

πŸ’‘

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСдний символ строки, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠŸΡ€Π°Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, 1) β€” это нСэффСктивно. ВмСсто этого ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎ индСксу: Π‘Ρ‚Ρ€ΠΎΠΊΠ°[Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°)].

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с подстроками

Рассмотрим Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π³Π΄Π΅ Π±Π΅Π· подстрок Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ для 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹ Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·Π°Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

1. Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΠ· строки

Допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ строка Π²ΠΈΠ΄Π° "Π—Π°ΠΊΠ°Π· ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° β„–Π’Π’-00123 ΠΎΡ‚ 15.05.2026", ΠΈ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ "Π’Π’-00123". Алгоритм:

  1. Найти ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ символа "β„–".
  2. ΠžΡ‚ΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ Π½Π° 1 символ Π²ΠΏΡ€Π°Π²ΠΎ (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сам "β„–").
  3. Найти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»Π° ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ†Π° строки.
  4. Π˜Π·Π²Π»Π΅Ρ‡ΡŒ подстроку ΠΌΠ΅ΠΆΠ΄Ρƒ этими позициями.
Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "Π—Π°ΠΊΠ°Π· ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° β„–Π’Π’-00123 ΠΎΡ‚ 15.05.2026";

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠΠ°Ρ‡Π°Π»Π° = БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "β„–") + 1;

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠšΠΎΠ½Ρ†Π° = БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, " ", ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠΠ°Ρ‡Π°Π»Π°);

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

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠšΠΎΠ½Ρ†Π° = Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) + 1;

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

НомСрДокумСнта = Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠΠ°Ρ‡Π°Π»Π°, ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠšΠΎΠ½Ρ†Π° - ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠΠ°Ρ‡Π°Π»Π°);

// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: "Π’Π’-00123"

2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° коррСктности ИНН

ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… источников часто трСбуСтся Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ИНН. НапримСр, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ строка содСрТит Ρ€ΠΎΠ²Π½ΠΎ 10 ΠΈΠ»ΠΈ 12 Ρ†ΠΈΡ„Ρ€. Π‘ подстроками это дСлаСтся Ρ‚Π°ΠΊ:

Ѐункция ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΠ˜ΠΠ(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)

// УдаляСм всС Π½Π΅Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ символы

Π’ΠΎΠ»ΡŒΠΊΠΎΠ¦ΠΈΡ„Ρ€Ρ‹ = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, "[^0-9]", "");

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ (Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π’ΠΎΠ»ΡŒΠΊΠΎΠ¦ΠΈΡ„Ρ€Ρ‹) = 10) Или (Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π’ΠΎΠ»ΡŒΠΊΠΎΠ¦ΠΈΡ„Ρ€Ρ‹) = 12);

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

Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ "[^0-9]" для удалСния всСх символов, ΠΊΡ€ΠΎΠΌΠ΅ Ρ†ΠΈΡ„Ρ€. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: рСгулярныС выраТСния Π² 1Π‘ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ() ΠΈ Π‘Ρ‚Ρ€ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ().

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ рСгулярныС выраТСния Π² 1Π‘?

Π’ 1Π‘ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° упрощённая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ() с Ρ„Π»Π°Π³ΠΎΠΌ Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. НапримСр:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "АБВ123Π“Π”Π•456";

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "[0-9]+", "*", , , Π˜ΡΡ‚ΠΈΠ½Π°);

// Π’Π΅Ρ€Π½Ρ‘Ρ‚ "АБВ*Π“Π”Π•*"

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ конструкции: [Π°-я] (Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹), ? (0 ΠΈΠ»ΠΈ 1 Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅), + (1 ΠΈ Π±ΠΎΠ»Π΅Π΅), * (0 ΠΈ Π±ΠΎΠ»Π΅Π΅). Но Π½Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π³Ρ€ΡƒΠΏΠΏ Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΈΠ»ΠΈ lookahead-assertions.

3. Π Π°Π·Π±ΠΎΡ€ строки с раздСлитСлями

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π·Π°Π΄Π°Ρ‡Π° β€” Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ строку Ρ‚ΠΈΠΏΠ° "Иванов;ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²;Π‘ΠΈΠ΄ΠΎΡ€ΠΎΠ²" Π½Π° массив Ρ„Π°ΠΌΠΈΠ»ΠΈΠΉ. Π’ 1Π‘ для этого ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ БтрНайти() ΠΈ Π‘Ρ€Π΅Π΄() Π² Ρ†ΠΈΠΊΠ»Π΅:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "Иванов;ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²;Π‘ΠΈΠ΄ΠΎΡ€ΠΎΠ²";

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

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

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

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠ Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Ρ = БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ";", ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ);

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

МассивЀамилий.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ));

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

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

МассивЀамилий.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ, ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠ Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Ρ - ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ));

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠ Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Ρ + 1;

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

Для простых случаСв ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ(), Π½ΠΎ ΠΎΠ½Π° ΠΌΠ΅Π½Π΅Π΅ гибкая, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ позволяСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ ΠΈΠ»ΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ пустыС элСмСнты.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с подстроками

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ѐункция БтрНайти() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 0, Ссли подстрока Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°. МногиС Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ "ИндСкс Π²Π½Π΅ Π³Ρ€Π°Π½ΠΈΡ† строки" ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π‘Ρ€Π΅Π΄().
  • 🚫 Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСгистра: Поиск БтрНайти("ΠŸΡ€ΠΈΠ²Π΅Ρ‚", "ΠΏΡ€ΠΈΠ²Π΅Ρ‚") Π²Π΅Ρ€Π½Ρ‘Ρ‚ 0, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ функция Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π° ΠΊ рСгистру. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ НРСг() для привСдСния ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру ΠΏΠ΅Ρ€Π΅Π΄ сравнСниСм.
  • 🚫 Π Π°Π±ΠΎΡ‚Π° с пустыми строками: Π’Ρ‹Π·ΠΎΠ² Π›Π΅Π²("", 1) ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ошибкС. ВсСгда провСряйтС Π΄Π»ΠΈΠ½Ρƒ строки ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ подстрок.
  • 🚫 ΠœΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ символы: Π’ строках с ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π΅ΠΉ ΠΈΠ»ΠΈ эмодзи Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π›Π΅Π²()/ΠŸΡ€Π°Π²() ΠΌΠΎΠ³ΡƒΡ‚ "Ρ€Π΅Π·Π°Ρ‚ΡŒ" символы ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π±Π°ΠΉΡ‚Π°ΠΌΠΈ, Π° Π½Π΅ символами. Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹.
  • 🚫 РСкурсивныС Π·Π°ΠΌΠ΅Π½Ρ‹: Π—Π°ΠΌΠ΅Π½Π° Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ("ААА", "АА", "А") даст "АА", Π° Π½Π΅ "А", Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Π½Π° происходит ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ. Для ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ Π½ΡƒΠΆΠ½Ρ‹ Ρ†ΠΈΠΊΠ»Ρ‹.

ОсобСнно ΠΊΠΎΠ²Π°Ρ€Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ символами. НапримСр, Π² строкС "ΠŸΡ€ΠΈΠ²Π΅Ρ‚πŸ˜Š" смайлик Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 4 Π±Π°ΠΉΡ‚Π°. Если Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠŸΡ€Π°Π²("ΠŸΡ€ΠΈΠ²Π΅Ρ‚πŸ˜Š", 2), Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ функция "откусит" Ρ‡Π°ΡΡ‚ΡŒ смайлика. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

Ѐункция Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ΠŸΡ€Π°Π²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π”Π»ΠΈΠ½Π°)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = "";

Π”Π»ΠΈΠ½Π°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ = Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

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

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

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

// ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ символы с ΠΊΠΎΠ½Ρ†Π°, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°Π±Π΅Ρ€Π΅ΠΌ Π½ΡƒΠΆΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = Π”Π»ΠΈΠ½Π°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ;

Пока Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚) < Π”Π»ΠΈΠ½Π° И ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ > 0 Π¦ΠΈΠΊΠ»

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ, 1) + Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

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

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ конфигурациях с большим ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠΌ тСкстовых Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π»ΠΎΠ³ΠΎΠ²) ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с подстроками Π² Ρ†ΠΈΠΊΠ»Π°Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ систСму. Для ускорСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΠ€Π°ΠΉΠ»() ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ порциями.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: ΠΊΠ°ΠΊ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с подстроками

Π Π°Π±ΠΎΡ‚Π° с подстроками Π² Ρ†ΠΈΠΊΠ»Π°Ρ… β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых рСсурсоёмких ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² 1Π‘. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ тысячи строк (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ парсингС Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²), слСдуйтС этим рСкомСндациям:

  • πŸ› οΈ Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ²: Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ всС вхоТдСния подстроки, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ БтрНайти() Π² Ρ†ΠΈΠΊΠ»Π΅ с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ β€” это квадратичная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. Π›ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку Π² массив символов.
  • πŸ› οΈ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π±ΡƒΡ„Π΅Ρ€: ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ² считывайтС Π΄Π°Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΏΠΎ 4096 Π±Π°ΠΉΡ‚ (ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ для 1Π‘), Π° Π½Π΅ построчно.
  • πŸ› οΈ ΠšΡΡˆΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹: Если ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ подстрока ищСтся ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ XML), сохраняйтС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π΅Ρ‘ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Π² массивС.
  • πŸ› οΈ ΠžΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ ΠΎΡ‚ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ: Они ΡƒΠ΄ΠΎΠ±Π½Ρ‹, Π½ΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ Π² 1Π‘. ЗамСняйтС ΠΈΡ… Π½Π° Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π°Π·Π±ΠΎΡ€, Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

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

Ѐункция НайтиВсСВхоТдСния(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°)

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

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

Π”Π»ΠΈΠ½Π°ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠΈ = Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°);

Π”Π»ΠΈΠ½Π°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ = Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

Пока ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ <= Π”Π»ΠΈΠ½Π°Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π¦ΠΈΠΊΠ»

НайдСно = БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ);

Если НайдСно = 0 Π’ΠΎΠ³Π΄Π°

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

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

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(НайдСно);

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ = НайдСно + Π”Π»ΠΈΠ½Π°ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠΈ; // ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Π΅ΠΌ ΡƒΠΆΠ΅ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

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

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ ошибка ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²: использованиС Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ() с рСгулярными выраТСниями Π² горячих Ρ†ΠΈΠΊΠ»Π°Ρ…. Π­Ρ‚Π° функция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² 10–100 Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π³Ρ€Π°Π½ΠΈΡ†|Π—Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ БтрНайти() Π½Π° Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π°Π·Π±ΠΎΡ€|ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΏΠΎ 4Кб|ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ подстроки|Π˜Π·Π±Π΅Π³Π°Ρ‚ΡŒ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ†ΠΈΠΊΠ»Π°Ρ…-->

Π Π°Π±ΠΎΡ‚Π° с подстроками Π² запросах 1Π‘

Π’ языкС запросов 1Π‘ Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ инструмСнты для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с подстроками, Π½ΠΎ ΠΈΡ… возмоТности ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • πŸ”Ž ΠŸΠžΠ”Π‘Π’Π ΠžΠšΠ() β€” ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ строки (Π°Π½Π°Π»ΠΎΠ³ Π‘Ρ€Π΅Π΄()).
  • πŸ”Ž ΠΠΠ™Π’Π˜() β€” ΠΈΡ‰Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ подстроки (ΠΊΠ°ΠΊ БтрНайти()).
  • πŸ”Ž Π—ΠΠœΠ•ΠΠ˜Π’Π¬() β€” замСняСт вхоТдСния (Π°Π½Π°Π»ΠΎΠ³ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ()).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ:

ВЫБРАВЬ

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Бсылка КАК Бсылка,

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ КАК ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π˜Π—

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Π—Π°ΠΊΠ°Π·ΠšΠ»ΠΈΠ΅Π½Ρ‚Π° КАК Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

Π“Π”Π•

ΠΠΠ™Π’Π˜(Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, "срочно") > 0

Π’Π°ΠΆΠ½Ρ‹Π΅ ограничСния:

  • Π’ запросах Π½Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для извлСчСния ΠΏΡ€Π°Π²ΠΎΠΉ/Π»Π΅Π²ΠΎΠΉ части строки β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠŸΠžΠ”Π‘Π’Π ΠžΠšΠ() с расчётом ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ.
  • Ѐункция ΠΠΠ™Π’Π˜() Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ рСгулярныС выраТСния.
  • ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с подстроками Π² запросах Π½Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ, поэтому ΠΈΡ… использованиС Π² Π“Π”Π• ΠΌΠΎΠΆΠ΅Ρ‚ сильно Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ подстрокС Π² большом справочникС, Π»ΡƒΡ‡ΡˆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π° сторонС 1Π‘ послС Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ, Π° Π½Π΅ Π² самом запросС. НапримСр:
Π’Ρ‹Π±ΠΎΡ€ΠΊΠ° = Запрос.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ().Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ();

Пока Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ() Π¦ΠΈΠΊΠ»

Если БтрНайти(Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, "срочно") > 0 Π’ΠΎΠ³Π΄Π°

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

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

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

Π­Ρ‚ΠΎ часто Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π² Π“Π”Π•.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹: ΠΊΠΎΠ³Π΄Π° подстроки Π½Π΅ подходят

Иногда Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ каТутся связанными с подстроками, Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ способами. Рассмотрим Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹:

Π—Π°Π΄Π°Ρ‡Π° ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с подстроками ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅
Π Π°Π·Π±ΠΎΡ€ XML/JSON Π‘Π»ΠΎΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ, экранированиС символов. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π§Ρ‚Π΅Π½ΠΈΠ΅XML, Π§Ρ‚Π΅Π½ΠΈΠ΅JSON ΠΈΠ»ΠΈ XDTO.
Поиск ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, email) РСгулярныС выраТСния Π² 1Π‘ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ символов.
ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ² БтрНайти() Π² Ρ†ΠΈΠΊΠ»Π°Ρ… Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ слишком Π΄ΠΎΠ»Π³ΠΎ. Π§ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» построчно ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ с использованиСм ВСкстовыйДокумСнт.
Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ строк с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠΈ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ "расстояниС" ΠΌΠ΅ΠΆΠ΄Ρƒ строками. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π›Π΅Π²Π΅Π½ΡˆΡ‚Π΅ΠΉΠ½Π° ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ фонСтичСский поиск.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ строка ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ email, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ рСгулярныС выраТСния. ВмСсто этого:

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

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ @ ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ послС Π½Π΅Ρ‘

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠ‘ΠΎΠ±Π°ΠΊΠΈ = БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "@");

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π›ΠΎΠΆΡŒ;

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

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠ’ΠΎΡ‡ΠΊΠΈ = БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ".", ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠ‘ΠΎΠ±Π°ΠΊΠΈ);

Если ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠ’ΠΎΡ‡ΠΊΠΈ = 0 Или ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠ’ΠΎΡ‡ΠΊΠΈ <= ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠ‘ΠΎΠ±Π°ΠΊΠΈ + 1 Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π›ΠΎΠΆΡŒ;

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

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π·Π°ΠΏΡ€Π΅Ρ‰Ρ‘Π½Π½Ρ‹Ρ… символов

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π›ΠΎΠΆΡŒ;

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π˜ΡΡ‚ΠΈΠ½Π°;

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

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² 5–10 Ρ€Π°Π· быстрСС, Ρ‡Π΅ΠΌ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½Π΅Π΅ для Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… случаСв.

πŸ’‘

ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠΈ β€” Π½Π΅ всСгда Π»ΡƒΡ‡ΡˆΠΈΠΉ инструмСнт. Для слоТных Π·Π°Π΄Π°Ρ‡ (парсинг, валидация, поиск ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ) часто эффСктивнСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСциализированныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈΠ»ΠΈ встроСнныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ 1Π‘ (XML, JSON, XDTO).

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

Как ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ подстроку ΠΌΠ΅ΠΆΠ΄Ρƒ двумя раздСлитСлями?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ БтрНайти() для поиска ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ Π‘Ρ€Π΅Π΄() для извлСчСния:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "Начало[Π½ΡƒΠΆΠ½Ρ‹ΠΉ тСкст]ΠšΠΎΠ½Π΅Ρ†";

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠΠ°Ρ‡Π°Π»Π° = БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "[") + 1;

ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠšΠΎΠ½Ρ†Π° = БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "]");

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠΠ°Ρ‡Π°Π»Π°, ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠšΠΎΠ½Ρ†Π° - ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΠΠ°Ρ‡Π°Π»Π°);

Если Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ нСсколько, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.

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

Ѐункция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π±Π°ΠΉΡ‚Π°ΠΌΠΈ, Π° Π½Π΅ с символами. Для ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹ (UTF-8) ΠΎΠ΄ΠΈΠ½ символ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ 2 Π±Π°ΠΉΡ‚Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

// ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ строку Π² массив символов

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

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

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

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с индСксами массива, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт β€” это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ символ.

Как Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС вхоТдСния подстроки, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ?

Бтандартная Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ() замСняСт Π½Π΅ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ вхоТдСния. Для ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»:

Ѐункция ΠŸΠΎΠ»Π½Π°ΡΠ—Π°ΠΌΠ΅Π½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π§Ρ‚ΠΎ, НаЧто)

Пока БтрНайти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π§Ρ‚ΠΎ) > 0 Π¦ΠΈΠΊΠ»

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π§Ρ‚ΠΎ, НаЧто);

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

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠŸΠΎΠ»Π½Π°ΡΠ—Π°ΠΌΠ΅Π½Π°("АААА", "АА", "Π‘") Π²Π΅Ρ€Π½Ρ‘Ρ‚ "Π‘Π‘", Π° Π½Π΅ "ААБ".

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подстроки для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ?

НСт, для Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„Π°ΠΉΠ»ΠΎΠ²) подстроки Π½Π΅ подходят. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

  • ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΠ€Π°ΠΉΠ»() / ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ€Π°ΠΉΠ»() для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.
  • Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅Π”Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Найти(), ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ() для манипуляций с Π±Π°ΠΉΡ‚Π°ΠΌΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ чтСния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° Ρ„Π°ΠΉΠ»Π°:

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

Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ = Π”Π°Π½Π½Ρ‹Π΅.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(100, 50); // 50 Π±Π°ΠΉΡ‚, начиная с 100-Π³ΠΎ

Как ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ строки Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° рСгистра ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ²?

ΠŸΡ€ΠΈΠ²Π΅Π΄ΠΈΡ‚Π΅ ΠΎΠ±Π΅ строки ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹:

Ѐункция Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒΠ‘Π΅Π·Π Π΅Π³ΠΈΡΡ‚Ρ€Π°Π˜ΠŸΡ€ΠΎΠ±Π΅Π»ΠΎΠ²(Π‘Ρ‚Ρ€ΠΎΠΊΠ°1, Π‘Ρ‚Ρ€ΠΎΠΊΠ°2)

Π‘Ρ‚Ρ€ΠΎΠΊΠ°1 = НРСг(Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°1, " ", ""));

Π‘Ρ‚Ρ€ΠΎΠΊΠ°2 = НРСг(Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°2, " ", ""));

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π‘Ρ‚Ρ€ΠΎΠΊΠ°1 = Π‘Ρ‚Ρ€ΠΎΠΊΠ°2;

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

Для Π±ΠΎΠ»Π΅Π΅ слоТных случаСв (ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΠΊΠΎΠ² прСпинания) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ() с рСгулярными выраТСниями.