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

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

Базовая функция Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с тСкстом

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

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… "Π‘Ρ‚Ρ€ΠΎΠΊΠ°". Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Π½Π΅Π΅ число ΠΈΠ»ΠΈ Π΄Π°Ρ‚Ρƒ Π±Π΅Π· явного привСдСния Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ выполнСния. Ѐункция рСгистрозависима ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, поэтому "Москва" ΠΈ "москва" Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ подстроками. Π­Ρ‚ΠΎ свойство часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠΉ ΠΏΡ€Π°Π²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΈ массовой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… свСдСний.

πŸ’‘

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρƒ Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра, сначала ΠΏΡ€ΠΈΠ²Π΅Π΄ΠΈΡ‚Π΅ строку ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ БтрНиТ(), Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π·Π°ΠΌΠ΅Π½Ρƒ, Π° Π·Π°Ρ‚Π΅ΠΌ, ΠΏΡ€ΠΈ нСобходимости, восстановитС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π±ΠΎΠ»Π΅Π΅ слоТныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Ρ‘Π½Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΡƒ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ Π³ΠΎΡ€ΠΎΠ΄Π°. Код Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠ’Π΅ΠΊΡΡ‚ = "Π³. Мосвка, ΡƒΠ». Π›Π΅Π½ΠΈΠ½Π°";

Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉΠ’Π΅ΠΊΡΡ‚ = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠ’Π΅ΠΊΡΡ‚, "Мосвка", "Москва");

// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: "Π³. Москва, ΡƒΠ». Π›Π΅Π½ΠΈΠ½Π°"

Однако, Ссли подстрока встрСчаСтся нСсколько Ρ€Π°Π·, функция Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ ΠΈΡ… всС. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для очистки тСкста ΠΎΡ‚ Π»ΠΈΡˆΠ½ΠΈΡ… символов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, мноТСствСнных ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСдопустимы Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

Условная Π·Π°ΠΌΠ΅Π½Π° с использованиСм БтрНайти

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

Π›ΠΎΠ³ΠΈΠΊΠ° построСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π² этом случаС услоТняСтся. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ тСкста, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρƒ. Π­Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π»ΠΈΡˆΠ½ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ присваивания, Ссли тСкст Π½Π΅ нуТдаСтся Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сказываСтся Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов Π΄Π°Π½Π½Ρ‹Ρ…. ОсобСнно это Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Π² Ρ†ΠΈΠΊΠ»Π°Ρ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

β˜‘οΈ Алгоритм условной Π·Π°ΠΌΠ΅Π½Ρ‹

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для Π·Π°ΠΌΠ΅Π½Ρ‹ тСкста Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΎΠ½ находится Π² ΠΊΠΎΠ½Ρ†Π΅ строки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ суффикса):

ВСкст = "ΠžΡ‚Ρ‡Π΅Ρ‚_2023.xml";

Буффикс = ".xml";

ДлинаВСкста = Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(ВСкст);

ДлинаБуффикса = Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Буффикс);

Если БтрНайти(ВСкст, Буффикс) = (ДлинаВСкста - ДлинаБуффикса + 1) Π’ΠΎΠ³Π΄Π°

ВСкстБСзБуффикса = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(ВСкст, Буффикс, "");

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

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ процСссом ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ строк. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Π΄Π»ΠΈΠ½Ρƒ строки, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ спСцсимволов ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ условия ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ устойчивым ΠΊ ошибкам Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ.

πŸ“Š Какой способ Π·Π°ΠΌΠ΅Π½Ρ‹ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ
РСгулярныС выраТСния
БрСдствами SQL
Π’Π½Π΅ΡˆΠ½ΠΈΠΌΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ

Π Π°Π±ΠΎΡ‚Π° с Π’Π°Π±Π»ΠΈΡ†Π΅ΠΉ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ Π·Π°ΠΌΠ΅Π½Π° строк записСй

Π’ контСкстС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "строка" часто относится Π½Π΅ ΠΊ тСкстовому Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π° ΠΊ строкС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ). Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΠΈΡ‰ΡƒΡ‚ способ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ строку Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ значСния Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ строкС. 3 Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠΌΠΈ достаточно гибкая.

Для Π·Π°ΠΌΠ΅Π½Ρ‹ содСрТимого строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ сущСствуСт ΠΎΠ΄Π½ΠΎΠΉ магичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это дСлаСтся Ρ‡Π΅Ρ€Π΅Π· поиск Π½ΡƒΠΆΠ½ΠΎΠΉ строки ΠΏΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ присваиваниС Π½ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π°ΠΌ. Если ΠΆΠ΅ трСбуСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ строки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ индСкса ΠΈΠ»ΠΈ поиск ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°, ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‰Π°Ρ основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ манипуляции строками Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

ΠœΠ΅Ρ‚ΠΎΠ΄ ОписаниС ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ
ΠŸΡ€ΡΠΌΠΎΠ΅ присваиваниС ИзмСнСниС Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ΠΎΠ² Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ строки Высокая Низкая
Π£Π΄Π°Π»ΠΈΡ‚ΡŒ + Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Полная Π·Π°ΠΌΠ΅Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° строки БрСдняя БрСдняя
ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ Низкая Высокая
Запрос ОбновлСниС Ρ‡Π΅Ρ€Π΅Π· язык запросов ΠžΡ‡Π΅Π½ΡŒ высокая БрСдняя

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ строки ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ индСксы ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… строк ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ†ΠΈΠΊΠ» с индСксом для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹, Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТны, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ элСмСнты ΠΈΠ»ΠΈ Π½Π΅ Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π›ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» "Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ" ΠΈΠ»ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€.

ИспользованиС рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ для слоТной Π·Π°ΠΌΠ΅Π½Ρ‹

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

Для выполнСния Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° рСгулярного выраТСния. Бинтаксис Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ знания спСцсимволов: ^ для Π½Π°Ρ‡Π°Π»Π° строки, $ для ΠΊΠΎΠ½Ρ†Π°, \d для Ρ†ΠΈΡ„Ρ€ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π­Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности для Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΈ трансформации Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π·Π½Π°Π½ΠΈΠΉ синтаксиса рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

ВСкст = "Π¦Π΅Π½Π°: 100 Ρ€ΡƒΠ±., Π‘ΠΊΠΈΠ΄ΠΊΠ°: 20 Ρ€ΡƒΠ±.";

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

// ЗамСняСм всС числа Π½Π° Π·Π½Π°ΠΊ "#"

НовыйВСкст = Π Π΅Π³Π’Ρ‹Ρ€.Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(ВСкст, "#");

// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: "Π¦Π΅Π½Π°: # Ρ€ΡƒΠ±., Π‘ΠΊΠΈΠ΄ΠΊΠ°: # Ρ€ΡƒΠ±."

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² 1Π‘

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования, рСализация рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² 1Π‘ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ограничСния ΠΏΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… конструкций (lookahead, lookbehind). ВсСгда тСстируйтС слоТныС выраТСния Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΡƒΡŽ ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚Π°Ρ†ΠΈΡŽ.

ИспользованиС рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π°ΠΌΠ΅Π½Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° простыми строковыми функциями. Они ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ большС рСсурсов процСссора. Если Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π² Π΄Π²Π° Π²Ρ‹Π·ΠΎΠ²Π° Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π½Π΅Ρ‚ смысла ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Π½Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ систСму рСгулярным Π΄Π²ΠΈΠΆΠΊΠΎΠΌ.

Π—Π°ΠΌΠ΅Π½Π° строк Π² запросах ΠΈ консоли

Часто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ строку Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ нСпосрСдствСнно Π² Ρ‚Π΅Π»Π΅ запроса ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π―Π·Ρ‹ΠΊ запросов 1Π‘ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π Π•Π“Π˜Π‘Π’Π  ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ строковыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ подстроки Π² старых вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ. Π’ соврСмСнных вСрсиях (8.3.20+) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ, Π½ΠΎ часто Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ хитрости.

Один ΠΈΠ· распространСнных ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² β€” использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π’Π«Π ΠΠ–Π•ΠΠ˜Π• ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°ΠΌΠ΅Π½Ρ‹ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° послС получСния Π΄Π°Π½Π½Ρ‹Ρ…. Однако, Ссли объСм Π΄Π°Π½Π½Ρ‹Ρ… Π²Π΅Π»ΠΈΠΊ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρƒ Π² запросС ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρƒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π›Π•Π’Π‘Π˜ΠœΠ’, ΠŸΠ ΠΠ’Π‘Π˜ΠœΠ’ ΠΈ ΠŸΠžΠ”Π‘Π’Π ΠžΠšΠ, Ссли позиция Π·Π°ΠΌΠ΅Π½Ρ‹ фиксирована.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» языка запросов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π‘Π£Π‘Π” (MS SQL, PostgreSQL, Oracle). Π’ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΏΡ€ΠΈ использовании спСцифичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Для слоТных ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ прямо Π² запросС ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π”Π°Π½Π½Ρ‹Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Ρ‚Π°ΠΌ выполняСтся ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Ρ†ΠΈΠΊΠ» ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (Ссли Π‘Π£Π‘Π” позволяСт), ΠΈ Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выбираСтся Π² основной Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ расход памяти, Π½ΠΎ снимаСт Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ с основного ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ оптимизация ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ΠŸΡ€ΠΈ массовой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ строк Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΡΠΎΠ²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, создавая Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ строки Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС Ρ†ΠΈΠΊΠ»Π°. Π’ 1Π‘ строки ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСизмСняСмыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ (Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€ΠΎΠ΄Π΅), ΠΈ каТдая опСрация ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² памяти. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² записСй это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ частым сборкам мусора ΠΈ замСдлСнию Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы.

Для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ слСдуСт ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ². Если Π·Π°ΠΌΠ΅Π½Π° Π½ΡƒΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для части записСй, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡ‚Π°Π²ΡŒΡ‚Π΅ условиС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅ стоит ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ², Π³Π΄Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° происходит строковая опСрация. Вынос Π»ΠΎΠ³ΠΈΠΊΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ»ΠΈ использованиС ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Ρ… запросов ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² дСсятки Ρ€Π°Π·.

πŸ’‘

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ: НС выполняйтС Π·Π°ΠΌΠ΅Π½Ρƒ строки, Ссли ΠΎΠ½Π° Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρ‹. Π›ΠΈΡˆΠ½Π΅Π΅ присваиваниС Π΄Π°ΠΆΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого значСния создаСт Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ памяти 1Π‘.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ частой ошибкой являСтся ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с внСшними систСмами. Если Π²Ρ‹ замСняСтС символы Π² строкС, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ· XML ΠΈΠ»ΠΈ JSON, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы (ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, ампСрсанды) ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ структуры Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅.

МоТно Π»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ строку Π² запросС 1Π‘ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ?

Π’ стандартном языкС запросов 1Π‘ Π½Π΅Ρ‚ прямой Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ StrReplace ΠΈΠ· SQL. Однако, начиная с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… вСрсий ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π·Π°ΠΌΠ΅Π½Ρƒ Π΄Π΅Π»Π°ΡŽΡ‚ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° послС Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для обновлСния.

Как Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² строкС Π½Π° подчСркивания?

Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, " ", "_"). Она Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ всС occurrences ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ². Если Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишниС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, потрСбуСтся Π±ΠΎΠ»Π΅Π΅ слоТный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ с Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΈΠ»ΠΈ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ "\s+".

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с числами?

Ѐункция ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… "Π‘Ρ‚Ρ€ΠΎΠΊΠ°". Если ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ число, Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка. НСобходимо ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ число Π² строку с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘Ρ‚Ρ€ΠΎΠΊΠ°(Число), Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρƒ, ΠΈ ΠΏΡ€ΠΈ нСобходимости ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² число.

Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку Π² Π’Π°Π±Π»ΠΈΡ†Π΅ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π’Π—.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(0), Π³Π΄Π΅ 0 β€” индСкс ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ нумСрация строк начинаСтся с нуля. ПослС удалСния индСксы ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… строк сдвинутся.

Π•ΡΡ‚ΡŒ Π»ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² Π·Π°ΠΌΠ΅Π½Π΅ для UTF-8 ΠΈ Win-1251 Π² 1Π‘?

Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ всС строки хранятся Π² Unicode (UTF-16). ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅-Π²Ρ‹Π²ΠΎΠ΄Π΅ Π²ΠΎ внСшниС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ сСрвисы. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с символами Unicode ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ нСзависимо ΠΎΡ‚ внСшнСй ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ.