Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования C++. ΠŸΡΡ‚ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 246

Автор Π‘Ρ‚Π΅Π½Π»ΠΈ Π›ΠΈΠΏΠΏΠΌΠ°Π½

Π—Π°Ρ‚Π΅ΠΌ происходит Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ regex_search(). Если ΠΎΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ соотвСтствиС, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true. Для Π²Ρ‹Π²ΠΎΠ΄Π° части строки test_str, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ схСмС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция-Ρ‡Π»Π΅Π½ str() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° results. Ѐункция regex_search() ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ поиск, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π² исходной ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ подстроку. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

freind

Поиск всСх соотвСтствий Π²ΠΎ Π²Π²ΠΎΠ΄Π΅ прСдставлСн Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 17.3.2.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° regex

ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса regex ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ assign() для присвоСния Π΅ΠΌΡƒ Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Ρ„Π»Π°Π³ΠΎΠ², Π²Π»ΠΈΡΡŽΡ‰ΠΈΡ… Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса regex. Π­Ρ‚ΠΈ Ρ„Π»Π°Π³ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ΅ΠΌΡƒΡŽ этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. ПослСдниС ΡˆΠ΅ΡΡ‚ΡŒ Ρ„Π»Π°Π³ΠΎΠ², ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π». 17.6, Π·Π°Π΄Π°ΡŽΡ‚ язык, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ написано рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. УстановлСн Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ„Π»Π°Π³ΠΎΠ² опрСдСлСния языка. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ установлСн Ρ„Π»Π°Π³ ECMAScript, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ использованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса regex спСцификации Π•Π‘ΠœΠ-262, ΡΠ²Π»ΡΡŽΡ‰Π΅ΠΉΡΡ языком рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ².

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€ΠΈ Ρ„Π»Π°Π³Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ нСзависимыС ΠΎΡ‚ языка аспСкты ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ рСгулярного выраТСния. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ поиск рСгулярного выраТСния Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ рСгистра символов.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„Π»Π°Π³ icase для поиска ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра символов: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π‘++ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сохранСна Π² Ρ„Π°ΠΉΠ»Π΅ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .cc, .Cc, .cC ΠΈΠ»ΠΈ .CC. Π”Π°Π²Π°ΠΉΡ‚Π΅ напишСм рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для распознавания любого ΠΈΠ· Π½ΠΈΡ… наряду с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ общСпринятыми Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²:

// ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ символов, сопровоТдаСмых

// ΠΈ "cpp", "cxx" ΠΈΠ»ΠΈ "cc"

regex r("[[:alnum:]]+\\.(cpp|схх|cc)$", regex::icase);

smatch results;

string filename;

while (cin >> filename)

 if (regex_search(filename, results, r))

  cout << results.str() << endl; // Π²Ρ‹Π²ΠΎΠ΄ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ соотвСтствия

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

Подобно Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы Π΅ΡΡ‚ΡŒ Π² языкС Π‘++ (см. Ρ€Π°Π·Π΄Π΅Π» 2.1.3), Ρƒ языков рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы. НапримСр, Ρ‚ΠΎΡ‡ΠΊΠ° (.) ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ соотвСтствуСт Π»ΡŽΠ±ΠΎΠΌΡƒ символу. Как ΠΈ Π² языкС Π‘++, для обозначСния ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° символа Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΡΡŽΡ‚ символом Π½Π°ΠΊΠ»ΠΎΠ½Π½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚Ρ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ наклонная Ρ‡Π΅Ρ€Ρ‚Π° Π²Π»Π΅Π²ΠΎ являСтся Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ символом Π² языкС Π‘++, Π² строковом Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π΅ языка Π‘++, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅ΠΌ Π½Π°ΠΊΠ»ΠΎΠ½Π½ΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ Π²Π»Π΅Π²ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π½Π°ΠΊΠ»ΠΎΠ½Π½ΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ Π²Π»Π΅Π²ΠΎ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² рСгулярном Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ \\..

Ошибки Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΈ использовании рСгулярного выраТСния

РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ "ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ" Π½Π° простом языкС программирования. Π­Ρ‚ΠΎΡ‚ язык Π½Π΅ интСрпрСтируСтся компилятором Π‘++, ΠΈ "компилируСтся" Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя выполнСния, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса regex инициализируСтся ΠΈΠ»ΠΈ присваиваСтся. Как ΠΈ Π² любой написанной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π² рСгулярных выраТСниях Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ошибки.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ синтаксиса рСгулярного выраТСния провСряСтся Π²ΠΎ врСмя выполнСния.

Если Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² записи рСгулярного выраТСния, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (см. Ρ€Π°Π·Π΄Π΅Π» 5.6) Ρ‚ΠΈΠΏΠ° regex_error ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя выполнСния. Подобно всСм стандартным Ρ‚ΠΈΠΏΠ°ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Ρƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ regex_error Π΅ΡΡ‚ΡŒ функция what(), ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ (см. Ρ€Π°Π·Π΄Π΅Π» 5.6.2). Π£ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ regex_error Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ функция-Ρ‡Π»Π΅Π½ code(), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ числовой ΠΊΠΎΠ΄ (зависящий ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ), ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏΡƒ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅ΠΉ ошибки. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ RE, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π». 17.7.


Π’Π°Π±Π»ΠΈΡ†Π° 17.7. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ошибок Π² рСгулярном Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Ρ‚ΠΈΠΏΠ°Ρ… regex ΠΈ regex_constants::syntax_option_type error_collate НСдопустимый запрос объСдинСния элСмСнтов error_ctype НСдопустимый класс символов error_escape НСдопустимый ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ»ΠΈ Π·Π°ΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΠΈΠΉ символ error_backref НСдопустимая обратная ссылка error_brack НСсоотвСтствиС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок ([ ΠΈΠ»ΠΈ ]) error_paren НСсоотвСтствиС ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок (( ΠΈΠ»ΠΈ )) error_brace НСсоотвСтствиС Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок ({ ΠΈΠ»ΠΈ }) error_badbrace НСдопустимый Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках ({}) error_range НСдопустимый Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, [z-a]) error_space НСдостаточно памяти для выполнСния этого рСгулярного выраТСния error_badrepeat ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉΡΡ символ (*?, + ΠΈΠ»ΠΈ {) Π½Π΅ прСдваряСтся допустимым рСгулярным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ error_complexity Π—Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½Π½ΠΎΠ΅ соотвСтствиС слишком слоТно error_stack НСдостаточно памяти для вычислСния соотвСтствия

НапримСр, Π² схСмС Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎ нСостороТности скобку:

try {

 // ошибка: ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π° Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ скобка послС alnum; конструктор

 // пСрСдаст ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

 regex r("[[:alnum:]+\\.(cpp|схх|cc)$", regex::icase);

 } catch (regex_error e)

 { cout << e.what() << "\ncode: " << e.code() << endl; }

ΠŸΡ€ΠΈ запускС Π½Π° систСмС Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

regex_error(error_brack):

The expression contained mismatched [ and ].

code: 4

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ опрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ code() для возвращСния ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ошибок, пСрСчислСнных Π² Ρ‚Π°Π±Π». 17.7, счСт ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, начинаСтся с нуля.

Π‘ΠΎΠ²Π΅Ρ‚. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ создания Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ "ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°" компилируСтся Π²ΠΎ врСмя выполнСния, Π° Π½Π΅ Π²ΠΎ врСмя компиляции. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ рСгулярного выраТСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π° ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, особСнно Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° рСгулярного выраТСния ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ слишком слоТно. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса regex ΠΈ присвоСниС Π½ΠΎΠ²ΠΎΠ³ΠΎ рСгулярного выраТСния ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса regex ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ этих Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π΅ создавайтС большС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса regex, Ρ‡Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π’ частности, Ссли рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ†ΠΈΠΊΠ»Π΅, Π΅Π³ΠΎ слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π½Π΅ Ρ†ΠΈΠΊΠ»Π°, ΠΈΠ·Π±Π΅ΠΆΠ°Π² пСрСкомпиляции ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

ΠšΠ»Π°ΡΡΡ‹ рСгулярного выраТСния ΠΈ Ρ‚ΠΈΠΏ исходной ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Поиск Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π² любой ΠΈΠ· исходных ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ символами Ρ‚ΠΈΠΏΠ° char ΠΈΠ»ΠΈ wchar_t, ΠΈ эти символы ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΉ строкС ΠΈΠ»ΠΈ Π² массивС символов (ΠΈΠ»ΠΈ Π² Π΅Π³ΠΎ вСрсии для wchar_t, ΠΈΠ»ΠΈ wstring). Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° RE опрСдСляСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ этим Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ исходных ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ класс regex содСрТит рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° char. Для Ρ‚ΠΈΠΏΠ° wchar_t Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° опрСдСляСт Ρ‚Π°ΠΊΠΆΠ΅ класс wregex, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ класса regex. ЕдинствСнноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ класса wregex Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ wchar_t вмСсто Ρ‚ΠΈΠΏΠ° char.

Π’ΠΈΠΏΡ‹ соотвСтствий ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² (ΠΎΠ½ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…) Π±ΠΎΠ»Π΅Π΅ спСцифичны. Они ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏΠΎΠΌ символов, Π½ΠΎ ΠΈ Ρ‚Π΅ΠΌ, являСтся Π»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ΠΈΠ»ΠΈ массивом: класс smatch прСдставляСт исходныС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚ΠΈΠΏΠ° string; класс cmatch β€” ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ массивы; wsmatch β€” строки Unicode (wstring); wcmatch β€” массивы символов wchar_t.