JavaRush/Java Π±Π»ΠΎΠ³/Архив info.javarush/ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3
articles
15 ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ Архив info.javarush
участников
ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ классы символов, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ (поиск ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ). ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 1

ΠŸΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ классы символов

API класса Pattern содСрТит ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ классы символов, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰ΠΈΠ΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ сокращСния часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 2Π’ этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ конструкции Π² Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ β€” сокращСнноС прСдставлСниС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ. НапримСр, \d ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ†ΠΈΡ„Ρ€Ρƒ (0-9), \w ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π»ΡŽΠ±ΡƒΡŽ Π·Π°Π³Π»Π°Π²Π½ΡƒΡŽ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΏΠΈΡΠ½ΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ, символ подчСркивания ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€Ρƒ). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ классы символов, Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π­Ρ‚ΠΎ сдСлаСт ваш ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡ‰Π΅ для чтСния ΠΈ исправлСния ошибок. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ слСша, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ экранированными ΠΈΠ»ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ… ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎΠ± экранировании ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ слСшСм ΠΈΠ»ΠΈ символами \Q ΠΈ \E для использования ΠΈΡ… Π² качСствС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… символов. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слСш с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ символами (Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°ΠΌΠΈ), Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот бэк слСш, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ.
private final String REGEX = "\\d"; // Ρ†ΠΈΡ„Ρ€Π°
Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ \d β€” рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅; Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слСш Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ. Наша тСстовая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ рСгулярныС выраТСния прямо ΠΈΠ· консоли, поэтому Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ слСш Π½Π΅ Π½ΡƒΠΆΠ΅Π½. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт использованиС ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… классов: ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 3ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 4Π’ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Ρ‚Ρ€Π΅Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€” просто Β«.Β» (ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ Ρ‚ΠΎΡ‡ΠΊΠ°), Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ любой символ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ поиск Π±Ρ‹Π» ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ Π²ΠΎ всСх случаях. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ классы, значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ рассмотрСли Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π²Ρ‹ΡˆΠ΅.

ΠšΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹

ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 4ΠšΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ количСство Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ символа Π² строку. Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ тонкости Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΆΠ°Π΄Π½Ρ‹Ρ…, Π»Π΅Π½ΠΈΠ²Ρ‹Ρ… ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΆΠ°Π΄Π½Ρ‹Ρ… ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ X?, X?? ΠΈ X?+ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ: Β«X Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈΠ»ΠΈ Π½Π΅Ρ‚ совсСм». Π•ΡΡ‚ΡŒ нСбольшиС отличия Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этих ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассмотрим Π½ΠΈΠΆΠ΅.

БовпадСния Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹

НачнСм с ΠΆΠ°Π΄Π½ΠΎΠ³ΠΎ. НапишСм Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… рСгулярных выраТСния: Π±ΡƒΠΊΠ²Π° Β«aΒ» со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами ?, * ΠΈΠ»ΠΈ +. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Ссли Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти рСгулярки Π½Π° пустой строкС: ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 5Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅, поиск Π±Ρ‹Π» ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… случаях, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ выраТСния a? ΠΈ a* Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ отсутствиС символа a Π² строкС. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ послСдний индСксы совпадСния ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ (0). Π’Π°ΠΊ ΠΊΠ°ΠΊ входная строка Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρ‹, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ :) Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ случай называСтся совпадСниСм Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Π’Π°ΠΊΠΈΠ΅ совпадСния Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… случаях: ΠΏΡ€ΠΈ пустой Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строкС, Π² Π½Π°Ρ‡Π°Π»Π΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки, послС послСднСго символа строки ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ символами строки. БовпадСния Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ: ΠΎΠ½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Рассмотрим Π΅Ρ‰Π΅ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² совпадСний Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Let’s explore zero-length matches with a few more examples. ИзмСним Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ строку Π½Π° символ Β«aΒ» ΠΈ наблюдаСм интСрСсный эффСкт: ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 6ВсС Ρ‚Ρ€ΠΈ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° нашли символ Β«aΒ», Π½ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ отсутствиС символа, нашли совпадСниС Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ 1 β€” послС послСднСго символа строки. Π’Π°ΠΊ происходит, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° воспринимаСт символ Β«aΒ» ΠΊΠ°ΠΊ строку ΠΈ Β«Π±Π΅ΠΆΠΈΡ‚Β» ΠΏΠΎ Π½Π΅ΠΉ ΠΏΠΎΠΊΠ° совпадСния Π½Π΅ закончатся. Π’ зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ»ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Β«Π½ΠΈΡ‡Π΅Π³ΠΎΒ» Π² ΠΊΠΎΠ½Ρ†Π΅ строки. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ строку Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· пяти Π±ΡƒΠΊΠ² Β«aΒ»: ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 7РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ a? Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ совпадСниС для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹ Π² строкС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ a* Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π΄Π²Π° совпадСния: ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов Β«aΒ»β€˜ ΠΈ совпадСниС Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π½Π° 5 ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ a+ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов Β«aΒ», Π½Π΅ находя ΠΏΡ€ΠΈ этом Β«Π½ΠΈΡ‡Π΅Π³ΠΎΒ» :) Π§Ρ‚ΠΎ ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ, Ссли Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Ρ€Π°Π·Π½Ρ‹Π΅ символы? НапримСр, Β«ababaaaabΒ»: ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 8Π‘ΠΈΠΌΠ²ΠΎΠ» Β«bΒ» находится Π½Π° 1, 3 ΠΈ 8 позициях ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ совпадСния Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π½Π° этих позициях. РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ a? Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚ внимания Π½Π° Β«bΒ», Π° просто ΠΈΡ‰Π΅Ρ‚ присутствиС (ΠΈΠ»ΠΈ отсутствиС) символа Β«aΒ». Если ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ допускаСт отсутствиС Β«aΒ» всС символы Π² строкС ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΡ‚ Β«aΒ» Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΊΠ°ΠΊ совпадСниС Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Для нахоТдСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, просто ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π΄Π»ΠΈΠ½Ρƒ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках: ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 9РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ a{3} ΠΈΡ‰Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… символов Β«aΒ». Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² строкС нСдостаточно символов a. Вторая содСрТит 3 символа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π’Ρ€Π΅Ρ‚ΠΈΠΉ тСст Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ совпадСниС Π² Π½Π°Ρ‡Π°Π»Π΅ строки. ВсС Ρ‡Ρ‚ΠΎ находится Π·Π° 3 символом Π½Π΅ удовлСтворяСт рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, Π² ΠΊΠΎΠ΄Π΅ Π½ΠΈΠΆΠ΅ β€” удовлСтворяСт ΠΈ найдутся нСсколько совпадСний: ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 10Для указания минимальной Π΄Π»ΠΈΠ½Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:
Enter your regex: a{3,}
Enter input string to search: aaaaaaaaa
I found the text "aaaaaaaaa" starting at index 0 and ending at index 9.
Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ совпадСниС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ строка удовлСтворяСт Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ минимальной Π΄Π»ΠΈΠ½Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (3) символов Β«aΒ». НаконСц, Π·Π°Π΄Π°Π½ΠΈΠ΅ максимальной Π΄Π»ΠΈΠ½Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 11Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ совпадСниС Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΎΡΡŒ Π½Π° ΡˆΠ΅ΡΡ‚ΠΎΠΌ символС. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ совпадСниС содСрТит символы послС ΡˆΠ΅ΡΡ‚ΠΎΠ³ΠΎ, Ρ‚.ΠΊ. ΠΎΠ½ΠΈ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ минимальной Π΄Π»ΠΈΠ½Ρ‹. Если Π±Ρ‹ строка Π±Ρ‹Π»Π° Π½Π° ΠΎΠ΄ΠΈΠ½ символ ΠΊΠΎΡ€ΠΎΡ‡Π΅, Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ совпадСния Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹.

ИспользованиС Π³Ρ€ΡƒΠΏΠΏ символов ΠΈ классов с ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ

Π”ΠΎ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΌΡ‹ тСстировали ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π½Π° строках, содСрТащих ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ символ. ΠšΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ своС дСйствиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ΄ΠΈΠ½ символ, поэтому рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Β«abc+Β» Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ стоки содСрТащиС Β«abΒ» ΠΈ Β«cΒ» ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·. Оно Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Β«abcΒ» ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·. Но ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ вмСстС с Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ ΠΈ классами символов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, [abc]+ (a ΠΈΠ»ΠΈ b ΠΈΠ»ΠΈ c, ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·) ΠΈΠ»ΠΈ (abc)+ (Β«abcΒ» ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·). НайдСм Π³Ρ€ΡƒΠΏΠΏΡƒ символов (dog), Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° Π² строкС: ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 12Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ совпадСниС, Ρ‚.ΠΊ. ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ распространяСтся Π½Π° Π³Ρ€ΡƒΠΏΠΏΡƒ символов. Если ΡƒΠ±Ρ€Π°Ρ‚ΡŒ скобки β€” ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ {3} Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π±ΡƒΠΊΠ²Ρƒ Β«gΒ». Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ с классами символов: ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 13ΠšΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ {3} распространяСт дСйствиС Π½Π° класс символов Π² скобках Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° символ Β«cΒ».

Различия ΠΆΠ°Π΄Π½Ρ‹Ρ…, Π»Π΅Π½ΠΈΠ²Ρ‹Ρ… ΠΈ свСрхТадных ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²

Π•ΡΡ‚ΡŒ нСбольшиС различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΆΠ°Π΄Π½Ρ‹ΠΌΠΈ (greedy), Π»Π΅Π½ΠΈΠ²Ρ‹ΠΌΠΈ (reluctant) ΠΈ Ρ€Π΅Π²Π½ΠΈΠ²Ρ‹ΠΌΠΈ (possessive) ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. Π–Π°Π΄Π½Ρ‹Π΅ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π½Π°Π·Π²Π°Π½Ρ‹ Ρ‚Π°ΠΊ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π½Π°ΠΉΡ‚ΠΈ максимально Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ совпадСниС: сначала ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° пытаСтся Β«ΡΡŠΠ΅ΡΡ‚ΡŒΒ» всю строку, Ссли совпадСниС Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Ρ‚ΠΎ отбрасываСтся ΠΎΠ΄ΠΈΠ½ символ ΠΈ поиск повторяСтся, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ совпадСниС ΠΈΠ»ΠΈ Π½Π΅ останСтся большС символов. Π›Π΅Π½ΠΈΠ²Ρ‹Π΅ β€” Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ с Π½Π°Ρ‡Π°Π»Π° строки, добавляя символ Π·Π° символом, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄ΡƒΡ‚ совпадСниС. НаконСц, рСвнивая квантификация просматриваСт сразу всю строку Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ‹, Π½Π΅ убирая символы, ΠΊΠ°ΠΊ Π² ΠΆΠ°Π΄Π½ΠΎΠΉ. Для дСмонстрации Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ строку xfooxxxxxxfoo. ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3 - 14ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΆΠ°Π΄Π½Ρ‹ΠΉ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ .* для поиска любого символа, 0 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ располоТСны символы "f" "o" "o". Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΆΠ°Π΄Π½Ρ‹ΠΉ β€” Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ совпадСниС содСрТит всю строку. Π–Π°Π΄Π½Ρ‹ΠΉ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚ всС совпадСния Π² строкС, Ρ‚.ΠΊ. Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ шагС, просмотрСв всю строку, ΠΎΠ½ Π½Π°ΠΉΠ΄Π΅Ρ‚ совпадСниС ΠΈ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” Π»Π΅Π½ΠΈΠ²Ρ‹ΠΉ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ с Π½Π°Ρ‡Π°Π»Π° строки, добавляя символ Π·Π° символом. НачинаСтся Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ «пустоты», Π½ΠΎ Ρ‚.ΠΊ. ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Β«fooΒ» Π½Π΅Ρ‚ Π² Π½Π°Ρ‡Π°Π»Π΅ строки, поиск продолТаСтся с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ символа Β«xΒ», послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ совпадСниС ΠΌΠ΅ΠΆΠ΄Ρƒ индСксами 0 ΠΈ 4. Поиск продолТаСтся Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° строки ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ совпадСниС Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ индСксами 4 ΠΈ 13. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ совпадСний ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ€Π΅Π²Π½ΠΈΠ²Ρ‹ΠΉ. Π’ этом случаС рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ .*+ «съСло» всю строку Π½Π΅ оставив Π½ΠΈΡ‡Π΅Π³ΠΎ для Β«fooΒ». Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π²Π½ΠΈΠ²Ρ‹ΠΉ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ всС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎΠ΅ Π² строкС, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ эффСктивнСС эквивалСнтного ΠΆΠ°Π΄Π½ΠΎΠ³ΠΎ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. На этом всё! Бсылка Π½Π° пСрвоисточник: ΠžΡΠ½ΠΎΠ²Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Java. Π§Π°ΡΡ‚ΡŒ 3
ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ (1)
  • популярныС
  • Π½ΠΎΠ²Ρ‹Π΅
  • старыС
Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ
Π Π°Π΄ΠΈΠΊ
Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ 35
19 ΠΌΠ°Ρ€Ρ‚Π° 2019, 05:32
Π’Π°ΠΊ ΠΈ Π½Π΅ понял, для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ "Ρ€Π΅Π²Π½ΠΈΠ²Ρ‹ΠΉ" ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.