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

Π’ языкС запросов ΠΈ встроСнном языкС 1Π‘ сущСствуСт нСсколько ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° зависит ΠΎΡ‚ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‚ΠΈΠΏΠ° ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ (ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅, Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅, Β«Π΅Π»ΠΎΡ‡ΠΊΠΈΒ») ΠΈ контСкста использования. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ строка Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π΅Π·Π°Π½Π° ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π΅Π²Π΅Ρ€Π½ΠΎ.

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

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ тСкста

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

Для Π·Π°ΠΌΠ΅Π½Ρ‹ Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π½Π° ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ достаточно ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ символы Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Однако стоит ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ΄Π΅ 1Π‘ двойная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° являСтся слуТСбным символом для обозначСния Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π° строковой константы. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ самой Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΊΠ°ΠΊ значСния Π΅Ρ‘ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ ΠΌΡ‹ мСняСм всС Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π½Π° ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅:

Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ° = "Π’ΠΎΠ²Π°Ρ€ ""Ноутбук"" стоит Π΄ΠΎΡ€ΠΎΠ³ΠΎ";

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, """", "'");

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚); // Π’Ρ‹Π²ΠΎΠ΄: Π’ΠΎΠ²Π°Ρ€ 'Ноутбук' стоит Π΄ΠΎΡ€ΠΎΠ³ΠΎ

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° синтаксис: Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΌΡ‹ пишСм Π΄Π²Π΅ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ "" Π²Π½ΡƒΡ‚Ρ€ΠΈ строки. Π­Ρ‚ΠΎ критичСски Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ часто ΡƒΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ, получая синтаксичСскиС ошибки.

πŸ’‘

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с большими объСмами тСкста, функция Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ достаточно быстро, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘.

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

Π Π°Π±ΠΎΡ‚Π° с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ

Π’ русскоязычном сСгмСнтС ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΎΠ±ΠΎΡ€ΠΎΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стандартныС ΠΌΠ°ΡˆΠΈΠ½ΠΎΠΏΠΈΡΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ (" "), Π½ΠΎ ΠΈ типографскиС (Β« Β»). ΠŸΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π²Π΅Π±-сайтов ΠΈΠ»ΠΈ Word-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Π±Π°Π·Ρƒ 1Π‘ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ «каша» ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… символов. Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄Ρ‹ этих символов ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… прямоС прСдставлСниС.

ВипографскиС ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ-Π΅Π»ΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ. БлСпая Π·Π°ΠΌΠ΅Π½Π° всСх ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π½Π° ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΊΠ°Π·ΠΈΡ‚ΡŒ смысл тСкста. НапримСр, Π·Π°ΠΌΠ΅Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Β« Π½Π° Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Β» Π² сСрСдинС прСдлоТСния выглядит нСэстСтично.

  • πŸ‡·πŸ‡Ί РусскиС ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ-Π΅Π»ΠΎΡ‡ΠΊΠΈ: Β« (ΠΊΠΎΠ΄ 171) ΠΈ Β» (ΠΊΠΎΠ΄ 187)
  • πŸ‡ΊπŸ‡Έ АнглийскиС Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ: " (ΠΊΠΎΠ΄ 34)
  • πŸ‡¬πŸ‡§ АнглийскиС ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ: ' (ΠΊΠΎΠ΄ 39)
  • πŸ‡©πŸ‡ͺ НСмСцкиС ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ-Π»Π°ΠΏΠΊΠΈ: β€ž (ΠΊΠΎΠ΄ 8222) ΠΈ " (ΠΊΠΎΠ΄ 8221)

Для Π·Π°ΠΌΠ΅Π½Ρ‹ спСцифичСских символов ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘ΠΈΠΌΠ²ΠΎΠ», которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ символ ΠΏΠΎ Π΅Π³ΠΎ ΠΊΠΎΠ΄Ρƒ. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°.

ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠ°Π•Π»ΠΎΡ‡ΠΊΠ°ΠžΡ‚ΠΊΡ€ = Π‘ΠΈΠΌΠ²ΠΎΠ»(171);

ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠ°Π•Π»ΠΎΡ‡ΠΊΠ°Π—Π°ΠΊΡ€ = Π‘ΠΈΠΌΠ²ΠΎΠ»(187);

ВСкст = "Π¦Π΅Π½Π° " + ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠ°Π•Π»ΠΎΡ‡ΠΊΠ°ΠžΡ‚ΠΊΡ€ + "100 Ρ€ΡƒΠ±." + ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠ°Π•Π»ΠΎΡ‡ΠΊΠ°Π—Π°ΠΊΡ€;

// Π—Π°ΠΌΠ΅Π½Π° Π΅Π»ΠΎΡ‡Π΅ΠΊ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅

ВСкст = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(ВСкст, ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠ°Π•Π»ΠΎΡ‡ΠΊΠ°ΠžΡ‚ΠΊΡ€, """");

ВСкст = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(ВСкст, ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠ°Π•Π»ΠΎΡ‡ΠΊΠ°Π—Π°ΠΊΡ€, """");

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ типографских ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ ΠΈΠ· этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π² ваш ΠΊΠΎΠ΄ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ 1Π‘ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ сохраняСт ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ UTF-8, ΠΈΠ½Π°Ρ‡Π΅ символы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² Π²ΠΎΠΏΡ€ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π½Π°ΠΊΠΈ.

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

πŸ“Š КакиС ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Ρ‡Π°Ρ‰Π΅ всСго Π»ΠΎΠΌΠ°ΡŽΡ‚ ваш ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…?
РусскиС Β«Π΅Π»ΠΎΡ‡ΠΊΠΈΒ»
АнглийскиС Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ "
АнглийскиС ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ '
НСмСцкиС Π»Π°ΠΏΠΊΠΈ β€ž

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

Начиная с вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 8.3.10, Π² 1Π‘ появилась полноцСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ РСгулярноСВыраТСниС. Π­Ρ‚ΠΎ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ слоТныС ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹, Π° Π½Π΅ просто фиксированныС строки.

РСгулярныС выраТСния Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ‹, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условиях. НапримСр, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ΠΈ ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‚ Ρ†ΠΈΡ„Ρ€Ρ‹, ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ находятся Π² Π½Π°Ρ‡Π°Π»Π΅ строки. Бинтаксис рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² 1Π‘ совмСстим со стандартом .NET.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°ΠΌΠ΅Π½Ρ‹ всСх Π²ΠΈΠ΄ΠΎΠ² ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ (ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ…) Π½Π° ΠΏΡƒΡΡ‚ΡƒΡŽ строку с использованиСм рСгулярок:

ВСкст = "ВСстовая 'строка' с ""Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ"" ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ";

РСгулярка = Новый РСгулярноСВыраТСниС("['""]");

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = РСгулярка.Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(ВСкст, "");

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚); // Π’Ρ‹Π²ΠΎΠ΄: ВСстовая строка с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ

Π’ шаблонС ['""] ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Π½Π°Π±ΠΎΡ€ символов. ΠœΡ‹ ΠΈΡ‰Π΅ΠΌ Π»ΠΈΠ±ΠΎ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΡƒΡŽ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ, Π»ΠΈΠ±ΠΎ Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ строки шаблона Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ΄Π²ΠΎΠ΅Π½ΠΈΠ΅ΠΌ.

ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ ОписаниС ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°ΠΌΠ΅Π½Ρ‹
['""] Π›ΡŽΠ±Π°Ρ одинарная ΠΈΠ»ΠΈ двойная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ всСх ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ
Β«.*?Β» ВСкст Π²Π½ΡƒΡ‚Ρ€ΠΈ русских ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ (Π»Π΅Π½ΠΈΠ²Ρ‹ΠΉ поиск) Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ содСрТимого
^" Двойная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° Π² Π½Π°Ρ‡Π°Π»Π΅ строки Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅
"$ Двойная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° Π² ΠΊΠΎΠ½Ρ†Π΅ строки ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° ΠΊΠΎΠ½Ρ†Π° строки

ИспользованиС рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большСй остороТности. Ошибка Π² шаблонС ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ функция Π²Π΅Ρ€Π½Π΅Ρ‚ null ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ лишниС части тСкста. ВсСгда тСстируйтС regex Π½Π° бСзопасных Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ запуском Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ срСдС.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ рСгулярныС выраТСния ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅?

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ РСгулярноСВыраТСниС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ компиляции шаблона ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС. Если Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Π½Ρƒ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΠΎ тысячам строк, создавайтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ РСгулярноСВыраТСниС ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅Π΄ Ρ†ΠΈΠΊΠ»ΠΎΠΌ, Π° Π½Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ. Π­Ρ‚ΠΎ ускорит Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² дСсятки Ρ€Π°Π·.

Π­ΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ для JSON ΠΈ XML

Часто Π·Π°Π΄Π°Ρ‡Π° Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π² 1Π‘ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ для ΠΈΡ… удалСния, Π° для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ экранирования ΠΏΡ€ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ JSON ΠΈ XML ΠΈΠΌΠ΅ΡŽΡ‚ строгиС ΠΏΡ€Π°Π²ΠΈΠ»Π°: строка Π² JSON Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚Π° Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π° Π»ΡŽΠ±Ρ‹Π΅ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ строки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ экранированы ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ слэшСм.

ВстроСнныС срСдства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON Π² 1Π‘ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π§Ρ‚Π΅Π½ΠΈΠ΅JSON ΠΈ Π—Π°ΠΏΠΈΡΡŒJSON) Π΄Π΅Π»Π°ΡŽΡ‚ это автоматичСски. Однако, Ссли Π²Ρ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ JSON-строку Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ, Π²Π°ΠΌ придСтся ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Для Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ строки ΠΊ вставкС Π² JSON Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС " Π½Π° \". Π’ ΠΊΠΎΠ΄Π΅ 1Π‘ это выглядит Ρ‚Π°ΠΊ:

БтрокаДляJSON = "Имя: ""Иван""";

// Π­ΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Ρ€ΡƒΡ‡Π½ΠΎΠΉ сборки JSON

Экранированная = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(БтрокаДляJSON, """", "\""");

ΠŸΠΎΠ»Π½Ρ‹ΠΉJSON = "{" + """name""" + ":" + """" + Экранированная + """" + "}";

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‚Ρ€ΠΎΠΉΠ½ΠΎΠ΅ ΠΈ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Π½ΠΎΠ΅ использованиС ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ встроСнныС классы сСриализации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π΅Ρ€ΡƒΡ‚ всю Π³Ρ€ΡΠ·Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° сСбя.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Никогда Π½Π΅ ΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ слоТный JSON ΠΈΠ»ΠΈ XML, просто замСняя ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ классы Π—Π°ΠΏΠΈΡΡŒJSON ΠΈΠ»ΠΈ Π—Π°ΠΏΠΈΡΡŒXML. Они Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ экранированиС спСцсимволов, пСрСносов строк ΠΈ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ.

Если ΠΆΠ΅ Π²Ρ‹ всС-Ρ‚Π°ΠΊΠΈ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со строками Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш. Π’ 1Π‘ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш Π² строковой константС Π½Π΅ являСтся ΡΠΊΡ€Π°Π½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ символом (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ C# ΠΈΠ»ΠΈ Java), поэтому Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎ. Но для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ понимания ΠΊΠΎΠ΄Π° ΠΈΠ½ΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‚ ΠΈ Π΅Π³ΠΎ.

πŸ’‘

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ всСгда ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ встроСнныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ чтСния/записи JSON ΠΈ XML, Π° Π½Π΅ Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΡŽ строками.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π² запросах

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

Π’ тСкстС запроса, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, двойная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° экранируСтся ΡƒΠ΄Π²ΠΎΠ΅Π½ΠΈΠ΅ΠΌ. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ дСйствуСт ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² запроса, Ссли ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠ΅ΠΉ (Ρ‡Ρ‚ΠΎ являСтся ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° встрСчаСтся Π² старом ΠΊΠΎΠ΄Π΅).

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ β€” использованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² запроса. Π’ этом случаС Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Π·Π°ΠΌΠ΅Π½Π΅ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, систСма сдСлаСт это сама.

Π’Π΅ΠΊΡΡ‚ΠŸΠΎΠΈΡΠΊΠ° = "ΠšΠ°Ρ„Π΅ ""Π£ АндрСя""";

Запрос = Новый Запрос;

Запрос.ВСкст = "ВЫБРАВЬ НомСнклатура.НаимСнованиС Π˜Π— Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.НомСнклатура КАК НомСнклатура Π“Π”Π• НомСнклатура.НаимСнованиС ΠŸΠžΠ”ΠžΠ‘ΠΠž &ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€";

Запрос.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€("ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€", "%" + Π’Π΅ΠΊΡΡ‚ΠŸΠΎΠΈΡΠΊΠ° + "%");

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Запрос.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ();

Π—Π΄Π΅ΡΡŒ пСрСмСнная Π’Π΅ΠΊΡΡ‚ΠŸΠΎΠΈΡΠΊΠ° содСрТит ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π½ΠΎ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅Ρ‘ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π”Π²ΠΈΠΆΠΎΠΊ 1Π‘ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы. Если ΠΆΠ΅ Π²Ρ‹ вставляСтС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прямо Π² тСкст запроса, Π²Π°ΠΌ придСтся ΡƒΠ΄Π²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

  • βœ… Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ строк с ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ.
  • ❌ Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ строк для формирования условий запроса.
  • ⚠️ ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² тСкстС запроса Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° удваиваСтся.

Ошибки Π² экранировании ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π² запросах приводят ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых частых ошибок: «Ошибка Π² тСкстС запроса». БистСма Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π³Π΄Π΅ заканчиваСтся строковая константа ΠΈ начинаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.

β˜‘οΈ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° запроса Π½Π° ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ

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

ЧастыС ошибки ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ°

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

Одна ΠΈΠ· распространСнных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ β€” использованиС ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ. Π‘ΠΈΠΌΠ²ΠΎΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выглядит ΠΊΠ°ΠΊ обычная двойная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°, Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ символом ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° Unicode, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ 1Π‘ Π½Π΅ распознаСт ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ строки. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСпрСдсказуСмым ошибкам компиляции.

Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΊΠ½ΠΎ ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠ΅ курсора Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ содСрТимоС строки. Если вмСсто ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊ ΠΈΠ»ΠΈ Π²ΠΎΠΏΡ€ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ, Π·Π½Π°Ρ‡ΠΈΡ‚, символ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ поддСрТиваСтся ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°.

Π’Π°ΠΊΠΆΠ΅ стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ БтрНайти. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, часто ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΎΠ½ΠΈ Π² строкС Π²ΠΎΠΎΠ±Ρ‰Π΅. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ рСсурсы процСссора Π² высоконагруТСнных систСмах.

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

Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ° = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, """", "'");

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

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Β«Π»Π΅Π½ΠΈΠ²ΠΎΠΉ Π·Π°ΠΌΠ΅Π½ΠΎΠΉΒ», ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ созданиС Π½ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² строки Π² памяти, Ссли Π·Π°ΠΌΠ΅Π½Π° Π½Π΅ трСбуСтся. Π’ Ρ†ΠΈΠΊΠ»Π°Ρ… ΠΏΠΎ большим массивам Π΄Π°Π½Π½Ρ‹Ρ… это Π΄Π°Π΅Ρ‚ ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΡ‹ΠΉ прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π»ΠΈΠ·Π½ΠΎΠΉ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘. ВсСгда ΡΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ΡΡŒ с синтаксис-ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΎΠΌ вашСй вСрсии ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

FAQ: Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

Как Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²ΠΎ всСх строках Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ?

Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΏΠΎ строкам Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ ΠΈ примСняйтС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, записывая Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ячСйку. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Для КаТдого Π‘Ρ‚Ρ€ΠΎΠΊΠ° Из Π’Π— Π¦ΠΈΠΊΠ» Π‘Ρ‚Ρ€ΠΎΠΊΠ°.НаимСнованиС = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°.НаимСнованиС, """", "'"); ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠŸΠΎΡ‡Π΅ΠΌΡƒ 1Π‘ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я скопировал с сайта?

Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Π²Ρ‹ скопировали Β«ΡƒΠΌΠ½ΡƒΡŽΒ» Ρ‚ΠΈΠΏΠΎΠ³Ρ€Π°Ρ„ΡΠΊΡƒΡŽ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ (Unicode), Π° Π½Π΅ стандартный ASCII символ. 1Π‘ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ для обозначСния строк Ρ‚ΠΎΠ»ΡŒΠΊΠΎ символ с ΠΊΠΎΠ΄ΠΎΠΌ 34. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘ΠΈΠΌΠ²ΠΎΠ»(34) для Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ получСния Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ°.

МоТно Π»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ краям строки?

Π”Π°, для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ БтрНачинаСтсяБ ΠΈ БтрЗаканчиваСтсяНа. Если условиС выполняСтся, ΠΎΠ±Ρ€Π΅Π·Π°ΠΉΡ‚Π΅ строку Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π‘Ρ€Π΅Π΄ ΠΈΠ»ΠΈ Π›Π΅Π²/ΠŸΡ€Π°Π² Π½Π° ΠΎΠ΄ΠΈΠ½ символ. РСгулярныС выраТСния Ρ‚ΠΎΠΆΠ΅ справятся с Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠΌ ^"|"$.

Как ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ для Π²Ρ‹Π²ΠΎΠ΄Π° Π² HTML?

Для HTML Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ Π½Π° ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ". Π­Ρ‚ΠΎ дСлаСтся стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, """", """). Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π»ΠΎΠΌΠΊΡƒ вСрстки ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ тСкста Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρ‚Π΅Π³ΠΎΠ².

Π•ΡΡ‚ΡŒ Π»ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² скорости ΠΌΠ΅ΠΆΠ΄Ρƒ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠΌ посимвольно?

Π”Π°, Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это нативная функция, выполнСнная Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ C++. Π ΡƒΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ символов Π² Ρ†ΠΈΠΊΠ»Π΅ Π½Π° встроСнном языкС 1Π‘ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π² дСсятки Ρ€Π°Π·, особСнно Π½Π° Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… строках.