ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ 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.