Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 39

Регулярные выражения

26.01.2024, 09:29. Показов 1391. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Пишу программку которая по шаблону определяет смайлик это или нет:
Java
1
2
3
4
5
6
7
8
9
10
11
       this.str = str;
        Pattern Pat = Pattern.compile("[:;]{1}-*[\\(\\)\\[\\]]{1}");
        Matcher M = Pat.matcher(str);
        
        int n=0;
            while (M.find()){
                n++;
            }
 
        System.out.println("смайлики: "+n);
        System.out.println("соотв: "+M.matches());
Должно быть так:
если я ввожу :---))), то это смайлик
если я ввожу :---))( или ::---))) или ;--)]] то нет

а у меня получается, что всегда смайлик, то есть если ввожу ::---)) или ;---))] программа говорит что это смайлик. Я добавил в шаблон \\b
Java
1
 Pattern Pat = Pattern.compile("\\b[:;]{1}-*[\\(\\)\\[\\]]{1}\\b");
программа вообще перестала находить, пробовал в скобки взять Pattern Pat = Pattern.compile("\\b([:;]{1}-*[\\(\\)\\[\\]]{1})\\b");
не помогло,так Pattern Pat = Pattern.compile("\\b([:;]{1}-*[\\(\\)\\[\\]]{1})\\B"); тоже не работает, то есть если добавляю \\b перестает находить, без \\b находит но не учитывает что в конце должны быть одинаковые скобки, а в начале один символ ; или :. Подскажите в чем тут дело?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.01.2024, 09:29
Ответы с готовыми решениями:

Регулярные выражения
На вход программе подается произвольный html-файл. <img src='Афины/213840972.jpg' width="43%"/> <img...

Регулярные выражения
Всем привет. Помогите разобраться с регулярными выражениями. Нашел код следующего вида Pattern pattern =...

Регулярные выражения
Имеется код, который должен добавлять всем тегам <img> недостающие атрибуты height и width со значениями заданными пользователем: public...

11
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3807 / 1645 / 428
Регистрация: 14.03.2022
Сообщений: 4,091
26.01.2024, 09:49
Цитата Сообщение от PavelK_1381 Посмотреть сообщение
а у меня получается, что всегда смайлик
Так ты сначала расскажи что для тебя является смайликом...
Приведи примеры строк где есть смайлики и где таковых нет.

Цитата Сообщение от PavelK_1381 Посмотреть сообщение
если ввожу ::---)) или ;---))] программа говорит что это смайлик
Я бы тоже так сказал.

Добавлено через 1 минуту
Цитата Сообщение от PavelK_1381 Посмотреть сообщение
[:;]{1}
Эквивалентное выражение - [:;].

Добавлено через 7 минут
PavelK_1381, я пока в Java про регулярки не прочитал...
Но вот тебе пример как такое можно реализовать на JavaScript

JavaScript
1
2
3
4
5
const r = /[:;8]-?[)(\[[\]\/\\QO]/
console.log(r.test(':)'))
console.log(r.test(':-('))
console.log(r.test(':--['))
console.log(r.test(':-Q'))
Возможно такое тебя устроит...
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 39
26.01.2024, 12:21  [ТС]
Смайликом будем считать последовательность символов,
удовлетворяющую условиям:
■ первым символом является либо ; (точка с запятой) либо
: (двоеточие) ровно один раз;
■ далее может идти символ – (минус) сколько угодно раз (в
том числе символ минус может идти ноль раз);
■ в конце обязательно идет некоторое количество (не меньше
одной) одинаковых скобок из следующего набора: (, ), [, ];
6
■ внутри смайлика не может встречаться никаких других
символов.

Добавлено через 6 минут
получается смайлик это: ;---)))) или [[ , а это: ;---)))[ или [[) или это ;[[ не смайлик

получается шаблон "[:;]{1}-*[\\(\\)\\[\\]]{1}" соответствует и этому ;---)))) и этому [[)
я так понял, что надо учитывать границы то есть \\b[:;]{1}-*[\\(\\)\\[\\]]{1}\\b, но почему то не работает, вообще перестает находить

Добавлено через 39 минут
Попробовал пример из описалова
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
 String str1="ggg dog ghghgh";
        Pattern Pat1 = Pattern.compile("\\bdog\\b");
        Matcher M1 = Pat.matcher(str1);    
            
        
        int m=0;
            while (M1.find()){
                m++;
            }
        
            System.out.println("str1: "+str1);
        System.out.println("смайлики: "+n);
        System.out.println("соотв М1: "+M1.find());
тоже не работает
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3807 / 1645 / 428
Регистрация: 14.03.2022
Сообщений: 4,091
26.01.2024, 12:28
PavelK_1381, такой вот вариант...

JavaScript
1
2
3
4
5
6
const r = /(?<=[^:;]|^)[:;]-*(\)+|\(+|\]+|\[+)(?:=[^\1]|$)/
console.log(r.test(':)'))
console.log(r.test(';:)'))
console.log(r.test(':-((('))
console.log(r.test(':--[['))
console.log(r.test(':--[)'))
Добавлено через 6 минут
Если вся строка анализируется на смайлик - тогда еще короче можно записать

JavaScript
1
2
3
4
5
6
const r = /^[:;]-*(\)+|\(+|\]+|\[+)$/
console.log(r.test(':)'))
console.log(r.test(';:)'))
console.log(r.test(':-((('))
console.log(r.test(':--[['))
console.log(r.test(':--[)'))
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 39
26.01.2024, 13:54  [ТС]
(?<=[^:;]|^)[:;]-*(\)+|\(+|\]+|\[+)(?:=[^\1]|$)
объясните то что выделено красным
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3807 / 1645 / 428
Регистрация: 14.03.2022
Сообщений: 4,091
26.01.2024, 14:00
Цитата Сообщение от PavelK_1381 Посмотреть сообщение
JavaScript
1
(?:=[^\1]|$)
Это "опережающая проверка".
\1 это ссылка на то, что было найдено в "первых скобках", т.е. (\)+|\(+|\]+|\[+)...

Цитата Сообщение от PavelK_1381 Посмотреть сообщение
JavaScript
1
(?<=[^:;]|^)
Это "ретроспективная проверка"

Подробное описание тут
https://learn.javascript.ru/re... lookbehind

Такие проверки, вроде, есть во много каких ЯП. Читал что Java одна из продвинутых в регулярках, т.ч. наверняка есть такое в арсенале.
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 39
26.01.2024, 14:05  [ТС]
/^[:;]-*(\)+|\(+|\]+|\[+)$/ это работает в случае если один раз вводишь :--))) если подряд через пробел :--))) :--)))), то уже нет
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3807 / 1645 / 428
Регистрация: 14.03.2022
Сообщений: 4,091
26.01.2024, 14:20
Цитата Сообщение от PavelK_1381 Посмотреть сообщение
это работает в случае если один раз вводишь
Я про это и предупредил ранее
Цитата Сообщение от krvsa Посмотреть сообщение
Если вся строка анализируется на смайлик - тогда еще короче можно записать
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 39
26.01.2024, 14:35  [ТС]
по идеи должно быть все проще. я попробовал пример из документации
Java
1
2
3
4
5
6
7
8
9
 String str1="dog ddog dogg";
        Pattern Pat1 = Pattern.compile("\\bdog\\b");
        Matcher M1 = Pat1.matcher(str1);    
            
        
        int m=0;
            while (M1.find()){
                m++;
            }
работает правильно - нашел один раз, но мой шаблон не хочет, что то в синтаксисе
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
27.01.2024, 16:08
Цитата Сообщение от PavelK_1381 Посмотреть сообщение
Пишу программку которая по шаблону определяет смайлик это или нет
Цитата Сообщение от PavelK_1381 Посмотреть сообщение
если подряд через пробел :--))) :--)))), то уже нет
Ты уж определись, что надо - представляет ли из себ я строка ПОЛНОСТЬЮ смайлик, состоит ли она из смайликов через пробел, найти все смайлики в строке, или вообще - что?
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
    public static void main(String[] args) {
        Pattern p = Pattern.compile("(?<![:;])[:;]-*(\\)+|\\(+|\\\\]+|\\[+)(?!\1)");
        String s = ":--))) :--)))) :-[";
        Matcher m = p.matcher(s);
        while (m.find()) {
            System.out.println(m.group());
        }
    }
Code
1
2
3
:--)))
:--))))
:-[
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 39
28.01.2024, 16:53  [ТС]
вводим :---)))) ;-]]]] ;;---))) ;---)))] программа должна выдать количество смайликов : 2
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 39
29.01.2024, 10:58  [ТС]
решил задачку таким способом:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
       this.str = str;
        
        Pattern spPatt = Pattern.compile("[\\w\\s]+");
        String[] arrStr =spPatt.split(str);
 
        
        
        Pattern Pat = Pattern.compile("[:;]-*(\\(+|\\]+|\\)+|\\[+)");
        Matcher matcher;
        int m=0;
        for(String strItem :  arrStr  ){
            matcher =Pat.matcher(strItem);
            if (matcher.matches()){
                m++;
                System.out.println(strItem+" - смайлик");
                System.out.println("----------------------------------");
           }
        }
        System.out.println("Количество смайликов в строке "+m);
считает как надо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2024, 10:58
Помогаю со студенческими работами здесь

Регулярные выражения
Здравствуйте уважаемые программисты подскажите пожалуйста почему не могу пройти тесты на данном коде используя регулярные выражения ...

Регулярные выражения
Помогите разобраться с регулярными выражениями, интересует Special constructs (named-capturing and non-capturing). Суть простая есть...

Регулярные выражения
Нужно сделать вот такое (картинка) Все никак не могу понять, как это сделать, информацию хорошую не могу найти Пытался сделать что то...

Регулярные выражения
Помогите составить регулярное выражение для удаления из строки подстроки, заключенной в скобки. String str = &quot;Вася пошутил...

Регулярные выражения
Здравствуйте , помогите придумать регулярное выражение к задаче The user name can be 3 to 15 characters of the Latin alphabet, numbers,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru